frmShare.cs
上传用户:hkhxjs
上传日期:2008-11-25
资源大小:155k
文件大小:42k
源码类别:

Internet/网络编程

开发平台:

C#

  1. namespace Client // Copyright 2001 Dreamtech Software India Inc.
  2. { // All rights reserved
  3.     
  4. using System; // Provides the basic functionality of .NET
  5. using System.Drawing; // Provides the Drawing features, Used for cursors
  6.     using System.Windows.Forms; // Provides the darwing of buttons, listviews etc
  7. using System.Net; // Provides the net related functionality 
  8. using System.Net.Sockets; // Provides the functionality of sockets
  9. using System.Text; // Provides the text manipulation functions
  10. using System.IO; // Provides I/O features
  11. using WorkingWithXML; // Custom class 
  12. using System.Collections; // Provides the different type of class collections
  13.     using System.ComponentModel;// Provides the facility of using components
  14. /// <summary>
  15.     ///    Summary description for frmShare.
  16.     /// </summary>
  17.     public class frmShare : System.Windows.Forms.Form
  18.     {
  19. private System.ComponentModel.IContainer components;
  20. private System.Windows.Forms.OpenFileDialog FileOpenDialog;
  21. public System.Windows.Forms.Button btnClose;
  22. public System.Windows.Forms.StatusBar sBar;
  23. private System.Windows.Forms.SaveFileDialog FileSaveDialog;
  24. private System.Windows.Forms.ToolTip toolTipText;
  25. public System.Windows.Forms.ListView lvFiles;
  26. public System.Windows.Forms.Button btnSearch;
  27. public System.Windows.Forms.Button btnDownload;
  28. public System.Windows.Forms.Button btnUpload;
  29. private System.Windows.Forms.ColumnHeader clhFilename;
  30. private System.Windows.Forms.ColumnHeader clhFileSize;
  31. private System.Windows.Forms.ColumnHeader clhType;
  32. /// <summary>
  33. /// User defined variables.
  34. /// </summary>
  35. /// <summary>
  36. /// stores the number of bytes written or read from any stream
  37. /// </summary>
  38. private int iBytes;
  39. /// <summary>
  40. /// These variables are used to store the name of the computer
  41. /// to which you have connected and the parent folder name.
  42. /// Parent folder name is the name of the folder of the contents
  43. /// which you are viewing in the window
  44. /// </summary>
  45. private string COMPUTERNAME,PARENTFOLDER;
  46. /// <summary>
  47. /// Stores a new created socket of type TCPClient(System defined class)
  48. /// used to communicate with the listener
  49. /// </summary>
  50. private TcpClient ClientSocket;
  51. /// <summary>
  52. /// creates a variable for XMLCreater(User defined class) to 
  53. /// create XML requests for the listener
  54. /// </summary>
  55. private XMLCreater xmlCreate;
  56. /// <summary>
  57. /// StreamTCP points to the NetworkStream(System defined class)
  58. /// which is used for transfer data over the Socket connection
  59. /// </summary>
  60. private NetworkStream StreamTCP;
  61. /// <summary>
  62. /// fileStream is an object of type FileStream(System defined class)
  63. /// used to have I/O capabilities for files which are used
  64. /// in this program
  65. /// </summary>
  66. private FileStream fileStream;
  67. /// <summary>
  68. /// ReadBuffer and WriteBuffer Byte arrays used for 
  69. /// Reading and Writing any file.
  70. /// </summary>
  71. private Byte[] ReadBuffer,WriteBuffer;
  72. /// <summary>
  73. /// xmlParser is of type XMLParser(User defined class)
  74. /// It is used to have the access for Parsing the XML file
  75. /// This class is present in WorkingWithXML
  76. /// </summary>
  77. private XMLParser xmlParser;
  78. /// <summary>
  79. /// xmlStruct is of type XMLSTRUCT(User defined structure)
  80. /// It is used to store the different records obtained
  81. /// from parsing the XML. This structure is present in WorkingWithXML
  82. /// </summary>
  83. private XMLSTRUCT xmlStruct;
  84. /// <summary>
  85. /// strArray if of Type __SHOWFILES of XMLSTRUCT Structure and
  86. /// used to save the corresponding Files/Folder which are seen in the
  87. /// the List view at run time
  88. /// </summary>
  89. private XMLSTRUCT.__SHOWFILES[] strArray;
  90. /// <summary>
  91. /// The below variables are readonly variables that u cannot
  92. /// assign a new value to these variables again. They are
  93. /// constant type variables
  94. /// </summary>
  95. /// <summary>
  96. /// REQUESTFILE have the name of the file which have to be created
  97. /// for a particular request
  98. /// </summary>
  99. public readonly string REQUESTFILE = Application.StartupPath + "\Request.xml";
  100. /// <summary>
  101. /// RESPONSEFILE have the name of the file which have to be created
  102. /// for a particular request
  103. /// </summary>
  104. public readonly string RESPONSEFILE = Application.StartupPath + "\Response.xml";
  105. private System.Windows.Forms.Label lblCopyright;
  106. /// <summary>
  107. /// MAX_SIZE defines the maximum size of the read or write buffer
  108. /// which is used for reading or wrting a file
  109. /// </summary>
  110. public readonly int MAX_SIZE = 512;
  111. /// <summary>
  112. /// This is the default contructor of the this class
  113. /// This is called from the View files button
  114. /// </summary>
  115. public frmShare()
  116.         {
  117.             //
  118.             // Required for Windows Form Designer support
  119.             //
  120.             // Auto generated code line by the IDE
  121. InitializeComponent();
  122. // Puts the Computer.ico as the form icon
  123. this.Icon = new System.Drawing.Icon(Application.StartupPath + "\Computer.ico");
  124. // Changes the Caption of this dialog box
  125. this.Text = "Search Result";
  126. sBar.Text = "Root";
  127. COMPUTERNAME = null;
  128. PARENTFOLDER = null;
  129.         }
  130. /// <summary>
  131. /// This is a user defined constructor called from the 
  132. /// Open button in the frmClient
  133. /// Computername is passed to this function, which you
  134. /// have selected from the Main window
  135. /// </summary>
  136. /// <param name="Computername"> </param>
  137. public frmShare(string Computername)
  138. {
  139.             //
  140.             // Required for Windows Form Designer support
  141. // This line is not auto generated, instead it has been copied from
  142. // default constructor
  143.             InitializeComponent();
  144. // Puts the Computer.ico as the form icon
  145. this.Icon = new System.Drawing.Icon(Application.StartupPath + "\Computer.ico");
  146. // COMPUTERNAME is a global variable used to store the name
  147. // and IP Address of the computer to which you are currently
  148. // connected
  149. COMPUTERNAME = Computername;
  150. // Open connection is a user defined function responsible for
  151. // opening a socket connection for listener. This function
  152. // returns a bool value
  153. if( OpenConnection(COMPUTERNAME) )
  154. {
  155. // This will creates a SHOWFILE request XML for seding it
  156. // to the listener
  157. CreateRequest("SHOWFILES","","");
  158. // This will actually sends the REQUESTFILE to the listener
  159. SendDataToListener(REQUESTFILE);
  160. // This will get the response of the above request from
  161. // listener and store that response in a RESPONSEFILE
  162. GetDataFromListener(RESPONSEFILE);
  163. // This will Parse that response XML File and results are
  164. // shown to the user
  165. Parsing(RESPONSEFILE);
  166. // Closes any Opened socket or stream connection
  167. CloseConnection();
  168. // Since this constructor is called at the root level
  169. // therefore no parent folder is associated with it
  170. PARENTFOLDER = null;
  171. // Changes the caption of this dialog box
  172. this.Text = "Shared contents on: " + Computername.ToUpper();
  173. // Sets the text for the Status bar
  174. sBar.Text = "Root";
  175. }
  176. }
  177. /// <summary>
  178. /// This is also a user defined constructor called from the
  179. /// Search button to view the search results
  180. /// This constructor is called from within this code only
  181. /// it is used to pass any type of request if needed at the time of
  182. /// its construction
  183. /// </summary>
  184. /// <param name="Computername stores the name of the computer to connect"> </param>
  185. /// <param name="Request stores what type of request you want to send to the listener"> </param>
  186. /// <param name="Scope scope value needed, if any"> </param>
  187. /// <param name="Mask mask value needed if any"> </param>
  188. public frmShare(string Computername, string Request, string Scope, string Mask)
  189. {
  190.             // Required for Windows Form Designer support
  191. // This line is not auto generated, instead it has been copied from
  192. // default constructor
  193.             InitializeComponent();
  194. // Puts the Computer.ico as the form icon
  195. this.Icon = new System.Drawing.Icon(Application.StartupPath + "\Computer.ico");
  196. // COMPUTERNAME is a global variable used to store the name
  197. // and IP Address of the computer to which you are currently
  198. // connected
  199. COMPUTERNAME = Computername;
  200. // Open connection is a user defined function responsible for
  201. // opening a socket connection for listener. This function
  202. // returns a bool value
  203. if( OpenConnection(COMPUTERNAME) )
  204. {
  205. // Creates an XML request with scope and mask
  206. CreateRequest(Request,Scope,Mask);
  207. // Sends this request to listener
  208. SendDataToListener(REQUESTFILE);
  209. // get the response from listener
  210. GetDataFromListener(RESPONSEFILE);
  211. // Parse that response for records and show those records
  212. Parsing(RESPONSEFILE);
  213. // Closes the active connection
  214. CloseConnection();
  215. // Assign scope to sText local variable
  216. string sText = Scope;
  217. // Extract the name of the PARENTFOLDER
  218. sText = sText.Substring(0, sText.LastIndexOf("\")+1);
  219. // changes the caption of this dialog box
  220. this.Text = sText + " on '" + Computername + "'";
  221. // Assign the value for PARENTFOLDER
  222. PARENTFOLDER = sText;
  223. // Changes the text of the status bar
  224. sBar.Text = sText;
  225. }
  226. }
  227. /// <summary>
  228.         ///    Clean up any resources being used.
  229.         ///    auto generated function by IDE
  230.         /// </summary>
  231.         public override void Dispose()
  232.         {
  233.             base.Dispose();
  234.             components.Dispose();
  235.         }
  236.         /// <summary>
  237.         ///    Required method for Designer support - do not modify
  238.         ///    the contents of this method with the code editor.
  239.         ///    These are also auto generated lines of code
  240.         /// </summary>
  241.         private void InitializeComponent()
  242. {
  243. this.components = new System.ComponentModel.Container();
  244. this.clhType = new System.Windows.Forms.ColumnHeader();
  245. this.toolTipText = new System.Windows.Forms.ToolTip(this.components);
  246. this.btnClose = new System.Windows.Forms.Button();
  247. this.btnSearch = new System.Windows.Forms.Button();
  248. this.btnUpload = new System.Windows.Forms.Button();
  249. this.btnDownload = new System.Windows.Forms.Button();
  250. this.lvFiles = new System.Windows.Forms.ListView();
  251. this.clhFilename = new System.Windows.Forms.ColumnHeader();
  252. this.clhFileSize = new System.Windows.Forms.ColumnHeader();
  253. this.sBar = new System.Windows.Forms.StatusBar();
  254. this.FileOpenDialog = new System.Windows.Forms.OpenFileDialog();
  255. this.FileSaveDialog = new System.Windows.Forms.SaveFileDialog();
  256. this.lblCopyright = new System.Windows.Forms.Label();
  257. this.SuspendLayout();
  258. // 
  259. // clhType
  260. // 
  261. this.clhType.Text = "Type";
  262. this.clhType.Width = 108;
  263. // 
  264. // btnClose
  265. // 
  266. this.btnClose.BackColor = System.Drawing.Color.Chocolate;
  267. this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
  268. this.btnClose.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
  269. this.btnClose.ForeColor = System.Drawing.Color.White;
  270. this.btnClose.Location = new System.Drawing.Point(217, 5);
  271. this.btnClose.Name = "btnClose";
  272. this.btnClose.Size = new System.Drawing.Size(71, 31);
  273. this.btnClose.TabIndex = 3;
  274. this.btnClose.Text = "&Close";
  275. this.toolTipText.SetToolTip(this.btnClose, "Exist from this window");
  276. this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
  277. // 
  278. // btnSearch
  279. // 
  280. this.btnSearch.BackColor = System.Drawing.Color.Chocolate;
  281. this.btnSearch.Enabled = false;
  282. this.btnSearch.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
  283. this.btnSearch.ForeColor = System.Drawing.Color.White;
  284. this.btnSearch.Location = new System.Drawing.Point(146, 5);
  285. this.btnSearch.Name = "btnSearch";
  286. this.btnSearch.Size = new System.Drawing.Size(71, 31);
  287. this.btnSearch.TabIndex = 2;
  288. this.btnSearch.Text = "&Search";
  289. this.toolTipText.SetToolTip(this.btnSearch, "Search for file(s) or folder(s)");
  290. this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click);
  291. // 
  292. // btnUpload
  293. // 
  294. this.btnUpload.BackColor = System.Drawing.Color.Chocolate;
  295. this.btnUpload.Enabled = false;
  296. this.btnUpload.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
  297. this.btnUpload.ForeColor = System.Drawing.Color.White;
  298. this.btnUpload.Location = new System.Drawing.Point(4, 5);
  299. this.btnUpload.Name = "btnUpload";
  300. this.btnUpload.Size = new System.Drawing.Size(71, 31);
  301. this.btnUpload.TabIndex = 0;
  302. this.btnUpload.Text = "&Upload";
  303. this.toolTipText.SetToolTip(this.btnUpload, "Writes the file to current location");
  304. this.btnUpload.Click += new System.EventHandler(this.btnUpload_Click);
  305. // 
  306. // btnDownload
  307. // 
  308. this.btnDownload.BackColor = System.Drawing.Color.Chocolate;
  309. this.btnDownload.Enabled = false;
  310. this.btnDownload.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
  311. this.btnDownload.ForeColor = System.Drawing.Color.White;
  312. this.btnDownload.Location = new System.Drawing.Point(75, 5);
  313. this.btnDownload.Name = "btnDownload";
  314. this.btnDownload.Size = new System.Drawing.Size(71, 31);
  315. this.btnDownload.TabIndex = 1;
  316. this.btnDownload.Text = "&Download";
  317. this.toolTipText.SetToolTip(this.btnDownload, "Download file to this computer");
  318. this.btnDownload.Click += new System.EventHandler(this.btnDownload_Click);
  319. // 
  320. // lvFiles
  321. // 
  322. this.lvFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
  323.   this.clhFilename,
  324.   this.clhFileSize,
  325.   this.clhType});
  326. this.lvFiles.ForeColor = System.Drawing.SystemColors.WindowText;
  327. this.lvFiles.FullRowSelect = true;
  328. this.lvFiles.HideSelection = false;
  329. this.lvFiles.Location = new System.Drawing.Point(3, 41);
  330. this.lvFiles.MultiSelect = false;
  331. this.lvFiles.Name = "lvFiles";
  332. this.lvFiles.Size = new System.Drawing.Size(502, 211);
  333. this.lvFiles.TabIndex = 4;
  334. this.toolTipText.SetToolTip(this.lvFiles, "Double click an entry to open");
  335. this.lvFiles.View = System.Windows.Forms.View.Details;
  336. this.lvFiles.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.lvFiles_KeyPress);
  337. this.lvFiles.DoubleClick += new System.EventHandler(this.lvFiles_DoubleClick);
  338. // 
  339. // clhFilename
  340. // 
  341. this.clhFilename.Text = "File / Folder";
  342. this.clhFilename.Width = 303;
  343. // 
  344. // clhFileSize
  345. // 
  346. this.clhFileSize.Text = "Size";
  347. this.clhFileSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
  348. this.clhFileSize.Width = 69;
  349. // 
  350. // sBar
  351. // 
  352. this.sBar.Location = new System.Drawing.Point(0, 259);
  353. this.sBar.Name = "sBar";
  354. this.sBar.Size = new System.Drawing.Size(508, 16);
  355. this.sBar.TabIndex = 5;
  356. // 
  357. // FileOpenDialog
  358. // 
  359. this.FileOpenDialog.Filter = "*.* (All files)|";
  360. this.FileOpenDialog.Title = "Select a file to upload";
  361. // 
  362. // lblCopyright
  363. // 
  364. this.lblCopyright.Location = new System.Drawing.Point(314, 14);
  365. this.lblCopyright.Name = "lblCopyright";
  366. this.lblCopyright.Size = new System.Drawing.Size(192, 14);
  367. this.lblCopyright.TabIndex = 6;
  368. this.lblCopyright.Text = "