0% found this document useful (0 votes)
57 views

Tcpclient Directoryinfo Treenode Treenode Timer Timer

This document contains code for a file transfer program with the following functionality: 1. It connects to an FTP server and logs in using provided username and password. 2. It displays the remote directory tree and files in list views after connecting. Buttons toggle the visibility of these views. 3. Methods are included to send FTP commands, get the response, and parse responses for things like passive connections and folder listings. 4. A timer is used to monitor the connection and automatically reconnect if needed. 5. Mouse hover text is provided for toolbar buttons to indicate their purpose.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
57 views

Tcpclient Directoryinfo Treenode Treenode Timer Timer

This document contains code for a file transfer program with the following functionality: 1. It connects to an FTP server and logs in using provided username and password. 2. It displays the remote directory tree and files in list views after connecting. Buttons toggle the visibility of these views. 3. Methods are included to send FTP commands, get the response, and parse responses for things like passive connections and folder listings. 4. A timer is used to monitor the connection and automatically reconnect if needed. 5. Mouse hover text is provided for toolbar buttons to indicate their purpose.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 18

private void Form1_Load(object sender, EventArgs e) {.

} private void OpenDir() //thm 20/11 {} TcpClient _connection ; DirectoryInfo curDir; TreeNode root = new TreeNode("/", 11, 11); Timer time = new Timer(); int _counttime = 0, second = 0, minute=0; string _Hostname; string _pathtreeview="/"; string[] _namefolder; int _countfolder=0; int _Port; string _Username; string _Passaword; bool _login = true; public Form1() { InitializeComponent(); this.time.Tick += new EventHandler(time_Tick); } ///////// tool private void ButtonLogview_MouseMove(object sender, MouseEventArgs e) { toolStripStatusLabel1.Text = "Toggles the display of the message log"; } private void ButtonLogview_MouseLeave(object sender, EventArgs e) { toolStripStatusLabel1.Text = ""; } private void ButtonLocalTree_MouseMove(object sender, MouseEventArgs e) { toolStripStatusLabel1.Text= "Toggles the display of the local directory tree"; } private void ButtonLocalTree_MouseLeave(object sender, EventArgs e) { toolStripStatusLabel1.Text = ""; } private void ButtonRemoteTree_MouseMove(object sender, MouseEventArgs e) { toolStripStatusLabel1.Text="Toggles the display of the remote directory tree"; } private void ButtonRemoteTree_MouseLeave(object sender, EventArgs e) { toolStripStatusLabel1.Text = ""; } private void ButtonQueue_MouseMove(object sender, MouseEventArgs e) { toolStripStatusLabel1.Text = "Toggles the display of the transfer queue"; }

private void ButtonQueue_MouseLeave(object sender, EventArgs e) { toolStripStatusLabel1.Text = ""; } private void ButtonLogview_Click(object sender, EventArgs e) { if (tlStripBtLogview.Checked == false) { tlStripBtLogview.Checked = true; ltBstatusconnect.Visible = true; splitterlogview.Visible = true; } else { tlStripBtLogview.Checked = false; ltBstatusconnect.Visible = false; splitterlogview.Visible = false; } } private void ButtonLocalTree_Click(object sender, EventArgs e) { if (tlStripBtLCtreeview.Checked == false) { tlStripBtLCtreeview.Checked = true; treeViewLocal.Visible = true; splittertreelocal.Visible = true; } else { tlStripBtLCtreeview.Checked = false; treeViewLocal.Visible = false; splittertreelocal.Visible = false; } } private void ButtonRemoteTree_Click(object sender, EventArgs e) { if (tlStripBtSevertree.Checked == false) { tlStripBtSevertree.Checked = true; treeViewSever.Visible = true; splittertreesever.Visible = true; } else { tlStripBtSevertree.Checked = false; treeViewSever.Visible = false; splittertreesever.Visible = false; } }

private void ButtonQueue_Click(object sender, EventArgs e) { if (tlStripBtQueueview.Checked == false) { tlStripBtQueueview.Checked = true; tabControl1.Visible = true; splitterqueue.Visible = true; } else { tlStripBtQueueview.Checked = false; splitterqueue.Visible = false; tabControl1.Visible = false; } } ///////////end toolbar private void tStripBtConnect_Click(object sender, EventArgs e) { Connection(); } string statuslog(Stream s) { char[] _char = new char[1024*10]; int _count = 0; StreamReader _str = new StreamReader(s); StringBuilder buff = new StringBuilder(); try { _count = _str.Read(_char, 0, 1024); } catch (Exception e) { MessageBox.Show(e.ToString()); } string _lresponse=""; for (int i = 0; i < _count; i++) { buff.Append(_char[i].ToString()); if (_char[i] == '\n') { lresponse = buff.ToString(); ltBstatusconnect.Items.Add("Response"+" buff = new StringBuilder(); } } return _lresponse;

"+buff.ToString());

} void time_Tick(object o, EventArgs e) { _counttime++; second =_counttime % 60; minute = (_counttime / 60) % 60; if (minute == 2&& second==0) { ltBstatusconnect.Items.Add("Error:" +" "+ "Connection closed by sever"); } }

void Connection() { string _lresponse; NetworkStream _response; treeViewSever.Nodes.Clear(); ltViewSever.Items.Clear(); ArrayList _Lfile = new ArrayList(); _Hostname = tStripTxtBHost.Text; _connection = new TcpClient(); _Port = 21; _Username = tStripTxtBUser.Text; _Passaword = tStripTxtBPass.Text; _connection.Connect(_Hostname, _Port); _response = _connection.GetStream(); _lresponse= statuslog(_response); if (_lresponse.Substring(0, 3) == "220") { time.Start(); _lresponse = Ftpcommand("USER " + _Username); if (_lresponse.Substring(0, 3) == "331") { _lresponse = Ftpcommand("PASS " + _Passaword); if (_lresponse.Substring(0, 3) != "230") { ltBstatusconnect.Items.Add("Error" +" "+ "Failed login"); } else { Ftpcommand("SYST"); Ftpcommand("FEAT"); Ftpcommand("PWD"); Ftpcommand("TYPE I"); getRemoteFolders(); for (int i = 0; i < _countfolder; i++) { TreeNode htdocs = new TreeNode(_namefolder[i], 11, 11); root.Nodes.Add(htdocs); } treeViewSever.Nodes.Add(root); } } else ltBstatusconnect.Items.Add("Error" + " } else { ltBstatusconnect.Items.Add("Error connection"); ltBstatusconnect.Items.Add("Re-connection"); // Connection(); } }

" + "Failed login");

public string Ftpcommand(string cmd) { _counttime = 0; second = 0; minute = 0; string _lresponse; byte[] _bytes = Encoding.Default.GetBytes(cmd + "\r\n"); ltBstatusconnect.Items.Add("Command" + " " + cmd); _connection.GetStream().Write(_bytes, 0, _bytes.Length); _lresponse = statuslog(_connection.GetStream()); return _lresponse; }

void reconnection() { string _lresponse; NetworkStream _response; _connection.Close(); _connection = new TcpClient(); _connection.Connect(_Hostname, _Port); _response = _connection.GetStream(); _lresponse = statuslog(_response); if (_lresponse.Substring(0, 3) == "220") { time.Start(); _lresponse = Ftpcommand("USER " + _Username); if (_lresponse.Substring(0, 3) == "331") { _login = true; _lresponse = Ftpcommand("PASS " + _Passaword); if (_lresponse.Substring(0, 3) != "230") { ltBstatusconnect.Items.Add("Error"+" "+"Failed login"); _login = false; } else _login = true; } else { ltBstatusconnect.Items.Add("Error"+" _login = false; } } }

" + "Failed login");

public byte[] sendPassiveFTPcmd(string cmd) { byte[] szData; NetworkStream _response; _response = _connection.GetStream(); System.Collections.ArrayList al = new ArrayList(); byte[] RecvBytes = new byte[Byte.MaxValue]; Int32 bytes; Int32 totalLength = 0; szData =Encoding.ASCII.GetBytes(cmd.ToCharArray()); Stream passiveConnection; passiveConnection = createPassiveConnection(); _response.Write(szData, 0, szData.Length); StreamReader _str = new StreamReader(_response); char[] _char = new char[1024 * 10]; int _count = 0; _count = _str.Read(_char, 0, 1024); while (_count > 0) { _count = _count - _str.ReadLine().Length; } while (true) { bytes = passiveConnection.Read(RecvBytes, 0, RecvBytes.Length); if (bytes <= 0) break; totalLength += bytes; al.AddRange(RecvBytes); } al = al.GetRange(0, totalLength); return (byte[])al.ToArray((new byte()).GetType()); } public Stream createPassiveConnection() { string[] commaSeperatedValues; int highByte = 0; int lowByte = 0; int passivePort = 0; string response = ""; TcpClient clientSocket=new TcpClient(); Stream pasvStrm = null; response = Ftpcommand("PASV"); commaSeperatedValues = response.Split(",".ToCharArray()); highByte = Convert.ToInt16(commaSeperatedValues[4]) * 256; commaSeperatedValues[5] = commaSeperatedValues[5].Substring(0, commaSeperatedValues[5].IndexOf(")")); lowByte = Convert.ToInt16(commaSeperatedValues[5]); passivePort = lowByte + highByte; clientSocket = new TcpClient(_Hostname, passivePort); pasvStrm = clientSocket.GetStream(); return pasvStrm; }

public void getRemoteFolders() { string[] filesAndFolders; string fileOrFolder; // FileInfo file; string[] infofile = new string[6]; _namefolder = new string[4096]; _countfolder = 0; string folderList = ""; int lastSpace = 0; ltViewSever.Items.Clear(); folderList =Encoding.ASCII.GetString(sendPassiveFTPcmd("LIST\r\n")); filesAndFolders = folderList.Split("\n".ToCharArray()); for (int i = 0; i < filesAndFolders.GetUpperBound(0); i++) { if (filesAndFolders[i].StartsWith("-") || filesAndFolders[i].StartsWith("d")) { lastSpace = 56; if (filesAndFolders[i].Length > 56) { if (filesAndFolders[i].StartsWith("-")) { int j; fileOrFolder = filesAndFolders[i].Substring(lastSpace); infofile[0] = fileOrFolder; infofile[1] = filesAndFolders[i].Substring(33, 10); if ((j = filesAndFolders[i].LastIndexOf(".")) != -1) {
infofile[2] = filesAndFolders[i].Substring(j + 1, filesAndFolders[i].Length-j-1).ToUpper();

} else {
infofile[2] = "File";

}
infofile[3] = filesAndFolders[i].Substring(43, 13); infofile[4] = filesAndFolders[i].Substring(0, 10); infofile[5] = filesAndFolders[i].Substring(16, 17); ListViewItem lvItem = new ListViewItem(infofile, 0);

switch (infofile[2].Trim('\r')) { case "TXT": lvItem.ImageIndex = 0; break; case "PNG": lvItem.ImageIndex = 1; break; case "BMG": lvItem.ImageIndex = 2; break; case "EXE": lvItem.ImageIndex = 3; break; case "GIF": lvItem.ImageIndex = 4; break; case "JGP": lvItem.ImageIndex = 5; break; case "DOC": case "DOCX": lvItem.ImageIndex = 7; break; case "XLS": case "XLSX": lvItem.ImageIndex = 8; break; case "PDF": lvItem.ImageIndex = 10; break; case "JPEG": lvItem.ImageIndex = 12; break; case "DLL": case "DB": lvItem.ImageIndex = 13; break;

case "ZIP": case "RAR": lvItem.ImageIndex = 15; break; case "HTML": case "HTM": case "PHP": case "XAML": case "XML": lvItem.ImageIndex = 16; break; case "CSS": lvItem.ImageIndex = 17; break; default: lvItem.ImageIndex = 14; break; } ltViewSever.Items.Add(lvItem); } else {
if (filesAndFolders[i].Substring(lastSpace) == ".\r")

{ } else {
fileOrFolder = filesAndFolders[i].Substring(lastSpace); if (filesAndFolders[i].Substring(lastSpace) == "..\r")

{ } else { _namefolder[_countfolder] = fileOrFolder; _countfolder++; }


infofile[0] infofile[1] infofile[2] infofile[3] infofile[4] infofile[5] = = = = = = fileOrFolder; " "; "File folder"; filesAndFolders[i].Substring(43, 13); filesAndFolders[i].Substring(0, 10); filesAndFolders[i].Substring(16, 17);

ListViewItem lvItem = new ListViewItem(infofile, 11);

ltViewSever.Items.Add(lvItem); } } } } } }

private void treeViewSever_AfterSelect(object sender, TreeViewEventArgs e) { _countfolder = 0; _namefolder = new string[4096];

if (e.Node.FullPath != "/" ) { string _path = e.Node.FullPath.Remove(1, 1).Replace('\\', ' '); string[] _char; _path = _path.Replace('\r', '/'); int i = _path.LastIndexOf('/'); _path = _path.Remove(i, 1); _char = _path.Split(' '); StringBuilder buff = new StringBuilder(); foreach (string s in _char) { buff.Append(s); } if (2 <= minute) { reconnection(); if (_login) { Ftpcommand("CWD " + buff.ToString()); _pathtreeview = buff.ToString(); } } else { Ftpcommand("CWD " + buff.ToString()); _pathtreeview = buff.ToString(); } } else { if (2 <=minute) { reconnection(); if (_login) { _pathtreeview = e.Node.FullPath; Ftpcommand("CWD " + e.Node.FullPath); } } else { _pathtreeview = e.Node.FullPath; Ftpcommand("CWD " + e.Node.FullPath); } } if (_login) { Ftpcommand("PWD"); Ftpcommand("TYPE I"); getRemoteFolders(); tlStripCmBSever.Text = _pathtreeview; TreeNode _checknode = e.Node.FirstNode; StringBuilder buffer = new StringBuilder(); string[] _textnode; int _flag = 0; if (_checknode != null) { while (_checknode != null)

{ buffer.Append(_checknode.Text); buffer.Append(","); _checknode = _checknode.NextNode; } _textnode = buffer.ToString().Split(','); for (int i = 0; i < _countfolder; i++) { _flag = 0; foreach (string s in _textnode) { if (s == _namefolder[i]) _flag = 1; } if (_flag == 0) {
TreeNode _Nodefolder = new TreeNode(_namefolder[i], 11, 11); e.Node.Nodes.Add(_Nodefolder);

} } } else { for (int i = 0; i < _countfolder; i++) {


TreeNode _Nodefolder = new TreeNode(_namefolder[i], 11, 11); e.Node.Nodes.Add(_Nodefolder);

} } } } private void ltViewSever_MouseDoubleClick(object sender, MouseEventArgs e) { ListViewItem Items = ltViewSever.FocusedItem; StringBuilder buff = new StringBuilder(); TreeNode _nodevisible=root.FirstNode; string[] _pathtam; string _stringtam="/"; int lenght = 0,flag=0;
if (Items.SubItems[0].Text != "..\r" && Items.SubItems[2].Text == "File folder")

{ if (2 <= minute) { reconnection(); if (_login) { Ftpcommand("CWD " + _pathtreeview); foreach (string s in Items.SubItems[0].Text.Split('\r')) { buff.Append(s); } Ftpcommand("CWD " + buff.ToString()); if (_pathtreeview == "/") { _pathtreeview = _pathtreeview + buff.ToString();

} else { _pathtreeview = _pathtreeview + "/" + buff.ToString(); } _stringtam = _pathtreeview; } } else { foreach (string s in Items.SubItems[0].Text.Split('\r')) { buff.Append(s); } Ftpcommand("CWD " + buff.ToString()); if (_pathtreeview == "/") { _pathtreeview = _pathtreeview + buff.ToString(); } else { _pathtreeview = _pathtreeview + "/" + buff.ToString(); } _stringtam= _pathtreeview; } if (_login) { Ftpcommand("PWD"); Ftpcommand("TYPE I"); getRemoteFolders(); tlStripCmBSever.Text = _pathtreeview; _pathtam = _stringtam.Split('/'); foreach (string s in _pathtam) { string a = ""; StringBuilder buffer = new StringBuilder(); if (s != "") { if (_nodevisible != null) {

while (true) { buffer = new StringBuilder(); a = _nodevisible.Text; foreach (string l in a.Split('\r')) { buffer.Append(l); break; } if (buffer.ToString() == s) { if (s == buff.ToString()) {

break; } _nodevisible = _nodevisible.FirstNode; break; } if (_nodevisible != null) { _nodevisible = _nodevisible.NextNode; } } } } } TreeNode _checknode = _nodevisible.FirstNode; StringBuilder _buffer = new StringBuilder(); string[] _textnode; int _flag = 0; if (_checknode != null) { while (_checknode != null) { _buffer.Append(_checknode.Text); _buffer.Append(","); _checknode = _checknode.NextNode; } _textnode = _buffer.ToString().Split(','); for (int i = 0; i < _countfolder; i++) { _flag = 0; foreach (string s in _textnode) { if (s == _namefolder[i]) _flag = 1; } if (_flag == 0) {
TreeNode _Nodefolder = new TreeNode(_namefolder[i],11,11); _nodevisible.Nodes.Add(_Nodefolder);

} } } else { for (int i = 0; i < _countfolder; i++) {


TreeNode _Nodefolder = new TreeNode(_namefolder[i],11, 11);

_nodevisible.Nodes.Add(_Nodefolder); } } } } else { if (2 <= minute) {

reconnection(); if (_login) { if (_pathtreeview != "/") {


flag = 1; lenght = _pathtreeview.LastIndexOf('/'); _pathtreeview = _pathtreeview.Remove(lenght, _pathtreeview.Length - lenght); Ftpcommand("CWD " + _pathtreeview);

} } } else { if (_pathtreeview != "/") {


flag = 1; lenght = _pathtreeview.LastIndexOf('/'); _pathtreeview = _pathtreeview.Remove(lenght, _pathtreeview.Length - lenght); Ftpcommand("CWD " + _pathtreeview);

} } if (_login) { if (flag == 1) { Ftpcommand("PWD"); Ftpcommand("TYPE I"); getRemoteFolders(); tlStripCmBSever.Text = _pathtreeview; } } } } private void tlStripCmBSever_KeyDown(object sender, KeyEventArgs e) { _namefolder = new string[4096]; _countfolder = 0; string _lresponse; if (e.KeyValue == 13) { if (2 <= minute) { reconnection(); if (_login) { _lresponse = Ftpcommand("CWD "+tlStripCmBSever.Text); if (_lresponse.Substring(0, 3) != "250") {
ltBstatusconnect.Items.Add("Command" + " "+"Failed to retrieve directory listing");

} else { Ftpcommand("PWD"); Ftpcommand("TYPE I"); getRemoteFolders(); if (tlStripCmBSever.Text != "/")

{ string _pathtam = tlStripCmBSever.Text; _pathtam = _pathtam.Remove(_pathtam.IndexOf('/'),1); string[] _strpath = _pathtam.Split('/'); TreeNode _Node = root.FirstNode; StringBuilder buff = new StringBuilder(); TreeNode _newnode; int i = 1; if (_Node != null) { foreach (string s in _strpath) { if (i == 1) { i = checknode(s, _Node); if (i == 0) { _newnode=new TreeNode(s+"\r",11,11); _Node = _Node.Parent; _Node.Nodes.Add(_newnode); _Node = _Node.FirstNode; } else { while (_Node != null) { buff = new StringBuilder();
foreach (string l in _Node.Text.Split('\r'))

{ buff.Append(l); break; } if (buff.ToString() == s) { if(_Node.FirstNode != null) { _Node = _Node.FirstNode; } break; } else { _Node = _Node.NextNode; } } } } else { _newnode = new TreeNode(s+"\r", 11, 11); _Node.Nodes.Add(_newnode); _Node = _Node.FirstNode; } } } TreeNode _checknode = _Node; StringBuilder _buffer = new StringBuilder(); string[] _textnode;

int _flag = 0; if (_checknode != null) { while (_checknode != null) { _buffer.Append(_checknode.Text); _buffer.Append(","); _checknode = _checknode.NextNode; } _textnode = _buffer.ToString().Split(','); for (int j = 0; j < _countfolder; j++) { _flag = 0; foreach (string s in _textnode) { if (s == _namefolder[j]) _flag = 1; } if (_flag == 0) {
TreeNode _Nodefolder = new TreeNode(_namefolder[j], 11, 11); _Node.Nodes.Add(_Nodefolder);

} } } else { for (int j = 0; j < _countfolder; j++) {


TreeNode _Nodefolder = new TreeNode(_namefolder[j], 11, 11); _Node.Nodes.Add(_Nodefolder);

} } } } } } else { _lresponse = Ftpcommand("CWD "+tlStripCmBSever.Text); if (_lresponse.Substring(0, 3) != "250") {


ltBstatusconnect.Items.Add("Command" + " "+"Failed to retrieve directory listing");

} else { Ftpcommand("PWD"); Ftpcommand("TYPE I"); getRemoteFolders(); if (tlStripCmBSever.Text != "/") { string _pathtam = tlStripCmBSever.Text; _pathtam = _pathtam.Remove(_pathtam.IndexOf('/'), 1); string[] _strpath = _pathtam.Split('/'); TreeNode _Node = root.FirstNode; TreeNode _findNode = _Node; StringBuilder buff = new StringBuilder(); TreeNode _newnode; int i = 1;

if (_Node != null) { foreach (string s in _strpath) { if (i == 1) { i = checknode(s, _Node); if (i == 0) {


_newnode = new TreeNode(s+"\r", 11, 11); _findNode.Nodes.Add(_newnode); _findNode = _newnode;

} else { while (_Node != null) {


buff = new StringBuilder(); foreach (string l in _Node.Text.Split('\r'))

{ buff.Append(l); break; } if (buff.ToString() == s) { _findNode = _Node; if (_Node.FirstNode != null) { _Node = _Node.FirstNode; } break; } else { _Node = _Node.NextNode; } } } } else { _newnode = new TreeNode(s+"\r", 11, 11); _findNode.Nodes.Add(_newnode); _findNode = _findNode.FirstNode; } } } else { foreach (string s in _strpath) { _newnode = new TreeNode(s, 11, 11); _findNode.Nodes.Add(_newnode); _findNode = _Node.FirstNode; } } TreeNode _checknode = _findNode.FirstNode; StringBuilder _buffer = new StringBuilder();

string[] _textnode; int _flag = 0; if (_checknode != null) { while (_checknode != null) { _buffer.Append(_checknode.Text); _buffer.Append(","); _checknode = _checknode.NextNode; } _textnode = _buffer.ToString().Split(','); for (int j = 0; j < _countfolder; j++) { _flag = 0; foreach (string s in _textnode) { if (s == _namefolder[j]) _flag = 1; } if (_flag == 0) {
TreeNode _Nodefolder=new TreeNode(_namefolder[j],11,11); _findNode.Nodes.Add(_Nodefolder);

} } } else { for (int j = 0; j < _countfolder; j++) {


TreeNode _Nodefolder = new TreeNode(_namefolder[j], 11, 11); _findNode.Nodes.Add(_Nodefolder);

} } } } } } } int checknode(string s, TreeNode Node) { int i = 0; StringBuilder buff = new StringBuilder(); string[] _str; while (Node != null) { buff.Append(Node.Text); Node = Node.NextNode; } _str = buff.ToString().Split('\r'); foreach (string l in _str) { if (l == s) return 1; } return i; } private void OpenDir() {.} private void Form1_Load(object sender, EventArgs e) {} private void tlStripCmBLocal_SelectedIndexChanged(object sender, EventArgs e)

private private private private private private } }

void void void void void void

listViewLocal_ItemActivate(object sender, EventArgs e) listViewLocal_MouseClick(object sender, MouseEventArgs e) contextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs treeViewLocal_BeforeExpand(object sender, TreeViewCancelEventArgs e) treeViewLocal_BeforeSelect(object sender, TreeViewCancelEventArgs e) treeViewLocal_BeforeCollapse(object sender, TreeViewCancelEventArgs e)

You might also like