[通信] C#多线程Socket-文件传输
FileSendClient :
Form1.cs
using System; using System.IO; using System.Net; using System.Net.Sockets; using System.Text; using System.Windows.Forms; namespace FileSendClient { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { FileDialog fDg = new OpenFileDialog(); if (fDg.ShowDialog() == DialogResult.OK) { FTClientCode.SendFile(fDg.FileName); } } private void timer1_Tick(object sender, EventArgs e) { label3.Text = FTClientCode.curMsg; } } //FILE TRANSFER USING C#.NET SOCKET - CLIENT class FTClientCode { public static string curMsg = "Idle"; public static void SendFile(string fileName) { try { // IPAddress ipAddress = Dns.GetHostEntry("109.52.62.59").AddressList[0]; IPAddress ipAddress2 = Dns.GetHostAddresses("109.52.62.59")[0]; IPEndPoint ipEnd = new IPEndPoint(ipAddress2, 3333); Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); string filePath = ""; fileName = fileName.Replace("\\", "/"); while (fileName.IndexOf("/") > -1) { filePath += fileName.Substring(0, fileName.IndexOf("/") + 1); fileName = fileName.Substring(fileName.IndexOf("/") + 1); } byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName); if (fileNameByte.Length > 850 * 1024) { curMsg = "File size is more than 850kb, please try with small file."; return; } curMsg = "Buffering ..."; byte[] fileData = File.ReadAllBytes(filePath + fileName); byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length]; byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length); fileNameLen.CopyTo(clientData, 0); fileNameByte.CopyTo(clientData, 4); fileData.CopyTo(clientData, 4 + fileNameByte.Length); curMsg = "Connection to server ..."; clientSock.Connect(ipEnd); curMsg = "File sending..."; clientSock.Send(clientData); curMsg = "Disconnecting..."; clientSock.Close(); curMsg = "File transferred."; } catch (Exception ex) { if (ex.Message == "No connection could be made because the target machine actively refused it") curMsg = "File Sending fail. Because server not running."; else curMsg = "File Sending fail." + ex.Message; } } public static IPAddress GetLocalIP() { IPAddress[] addressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList; foreach (IPAddress ipAddress in addressList) { if (ipAddress.AddressFamily == AddressFamily.InterNetwork) return ipAddress; } return addressList[0]; } } }
Form1.Designer.cs
namespace FileSendClient { partial class Form1 { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.button1 = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.timer1 = new System.Windows.Forms.Timer(this.components); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(98, 120); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(157, 23); this.button1.TabIndex = 0; this.button1.Text = "Select File to Send"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // // label1 // this.label1.AutoSize = true; this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.label1.ForeColor = System.Drawing.Color.Green; this.label1.Location = new System.Drawing.Point(12, 22); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(359, 16); this.label1.TabIndex = 1; this.label1.Text = "That program can transfer small file. I\'ve test up to 1.5MB file"; // // label2 // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(21, 157); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(79, 13); this.label2.TabIndex = 2; this.label2.Text = "Present Status:"; // // label3 // this.label3.AutoSize = true; this.label3.Location = new System.Drawing.Point(106, 157); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(24, 13); this.label3.TabIndex = 3; this.label3.Text = "Idle"; // // timer1 // this.timer1.Enabled = true; this.timer1.Interval = 500; this.timer1.Tick += new System.EventHandler(this.timer1_Tick); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(375, 273); this.Controls.Add(this.label3); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button button1; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; private System.Windows.Forms.Timer timer1; } }
FileSendServer
Form1.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.IO.Compression; using System.Net; using System.Net.Sockets; using System.Text; using System.Windows.Forms; namespace FileSendServer { public partial class Form1 : Form { public Form1() { InitializeComponent(); FTServerCode.receivedPath = ""; } private void button1_Click(object sender, EventArgs e) { if (FTServerCode.receivedPath.Length > 0) backgroundWorker1.RunWorkerAsync(); else MessageBox.Show("Please select file receiving path"); } private void timer1_Tick(object sender, EventArgs e) { label5.Text = FTServerCode.receivedPath; label3.Text = FTServerCode.curMsg; } FTServerCode obj = new FTServerCode(); private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { obj.StartServer(); } private void button2_Click(object sender, EventArgs e) { FolderBrowserDialog fd = new FolderBrowserDialog(); if (fd.ShowDialog() == DialogResult.OK) { FTServerCode.receivedPath = fd.SelectedPath; } } } //FILE TRANSFER USING C#.NET SOCKET - SERVER class FTServerCode { IPEndPoint ipEnd; Socket sock; public FTServerCode() { ipEnd = new IPEndPoint(IPAddress.Any, 5656); sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); sock.Bind(ipEnd); } public static string receivedPath; public static string curMsg = "Stopped"; public void StartServer() { try { curMsg = "Starting..."; sock.Listen(100); curMsg = "Running and waiting to receive file."; Socket clientSock = sock.Accept(); byte[] clientData = new byte[1024 * 5000]; int receivedBytesLen = clientSock.Receive(clientData); curMsg = "Receiving data..."; int fileNameLen = BitConverter.ToInt32(clientData, 0); string fileName = Encoding.ASCII.GetString(clientData, 4, fileNameLen); BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath + "/" + fileName, FileMode.Append)); ; bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen); curMsg = "Saving file..."; bWrite.Close(); clientSock.Close(); curMsg = "Reeived & Saved file; Server Stopped."; } catch (Exception ex) { curMsg = "File Receving error."; } } } }
Form1.Designer.cs
namespace FileSendServer { partial class Form1 { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.button1 = new System.Windows.Forms.Button(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); this.timer1 = new System.Windows.Forms.Timer(this.components); this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker(); this.button2 = new System.Windows.Forms.Button(); this.label5 = new System.Windows.Forms.Label(); this.label6 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(40, 103); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(331, 23); this.button1.TabIndex = 1; this.button1.Text = "Start Server"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // // label2 // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(37, 186); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(74, 13); this.label2.TabIndex = 5; this.label2.Text = "Server Status:"; // // label3 // this.label3.AutoSize = true; this.label3.Location = new System.Drawing.Point(137, 186); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(47, 13); this.label3.TabIndex = 6; this.label3.Text = "Stopped"; // // label4 // this.label4.AutoSize = true; this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.label4.ForeColor = System.Drawing.Color.ForestGreen; this.label4.Location = new System.Drawing.Point(12, 9); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(359, 16); this.label4.TabIndex = 7; this.label4.Text = "That program can transfer small file. I\'ve test up to 1.5MB file"; // // timer1 // this.timer1.Enabled = true; this.timer1.Interval = 500; this.timer1.Tick += new System.EventHandler(this.timer1_Tick); // // backgroundWorker1 // this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork); // // button2 // this.button2.Location = new System.Drawing.Point(40, 60); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(331, 23); this.button2.TabIndex = 8; this.button2.Text = "Select Receiving Path"; this.button2.UseVisualStyleBackColor = true; this.button2.Click += new System.EventHandler(this.button2_Click); // // label5 // this.label5.AutoSize = true; this.label5.Location = new System.Drawing.Point(137, 163); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(16, 13); this.label5.TabIndex = 10; this.label5.Text = " "; // // label6 // this.label6.AutoSize = true; this.label6.Location = new System.Drawing.Point(37, 163); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(96, 13); this.label6.TabIndex = 9; this.label6.Text = "File receiving path:"; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(431, 273); this.Controls.Add(this.label5); this.Controls.Add(this.label6); this.Controls.Add(this.button2); this.Controls.Add(this.label4); this.Controls.Add(this.label3); this.Controls.Add(this.label2); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button button1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label4; private System.Windows.Forms.Timer timer1; private System.ComponentModel.BackgroundWorker backgroundWorker1; private System.Windows.Forms.Button button2; private System.Windows.Forms.Label label5; private System.Windows.Forms.Label label6; } }
Powered By D&J (URL:http://www.cnblogs.com/Areas/)