程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> c#winform socket網絡編程,點對點傳輸文件,socket文件傳輸,監

c#winform socket網絡編程,點對點傳輸文件,socket文件傳輸,監

編輯:C#基礎知識

服務器用來接收文件,不停的監聽端口,有發送文件就馬上開始接收文件
服務端代碼:

 

  • using System;   
  • using System.Collections.Generic;   
  • using System.ComponentModel;   
  • using System.Data;   
  • using System.Drawing;   
  • using System.Text;   
  • using System.Windows.Forms;   
  •   
  •   
  • using System.Net;   
  • using System.Threading;   
  • using System.Net.Sockets;   
  •   
  • using System.IO;   
  •   
  • namespace TestSocketServerHSTF   
  • {   
  •     public partial class Form1 : Form   
  •     {   
  •         public Form1()   
  •         {   
  •             InitializeComponent();   
  •   
  •   
  •             //不顯示出dataGridView1的最後一行空白   
  •             dataGridView1.AllowUserToAddRows = false;   
  •         }  
  •  
  •  
  •         #region 定義變量  
  •  
  •  
  •         #endregion  
  •  
  •  
  •  
  •         #region 進入窗體即啟動服務   
  •   
  •         private void Form1_Load(object sender, EventArgs e)   
  •         {   
  •             //開啟接收線程   
  •             Thread TempThread = new Thread(new ThreadStart(this.StartReceive));   
  •             TempThread.Start();   
  •         }  
  •  
  •           
  •         #endregion  
  •  
  •  
  •  
  •         #region 功能函數   
  •   
  •         private void StartReceive()   
  •         {   
  •             //創建一個網絡端點   
  •             IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse("2005"));   
  •   
  •             //MessageBox.Show(IPAddress.Any);   
  •   
  •             //創建一個套接字   
  •             Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);   
  •   
  •             //綁定套接字到端口   
  •             server.Bind(ipep);   
  •   
  •             //開始偵聽(並堵塞該線程)   
  •             server.Listen(10);   
  •   
  •             //確認連接   
  •             Socket client = server.Accept();   
  •   
  •             //獲得客戶端節點對象   
  •             IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;   
  •                
  •   
  •   
  •             //獲得[文件名]   
  •             string SendFileName = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));   
  •             //MessageBox.Show("文件名" + SendFileName);   
  •   
  •             //獲得[包的大小]   
  •             string bagSize = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));   
  •             //MessageBox.Show("包大小" + bagSize);   
  •   
  •             //獲得[包的總數量]   
  •             int bagCount = int.Parse(System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client)));   
  •             //MessageBox.Show("包的總數量" + bagCount);   
  •   
  •             //獲得[最後一個包的大小]   
  •             string bagLast = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));   
  •             //MessageBox.Show("最後一個包的大小" + bagLast);   
  •   
  •             //創建一個新文件   
  •             FileStream MyFileStream = new FileStream(SendFileName, FileMode.Create, FileAccess.Write);   
  •   
  •             //已發送包的個數   
  •             int SendedCount = 0;   
  •   
  •             while (true)   
  •             {   
  •                 byte[] data = TransferFiles.ReceiveVarData(client);   
  •                 if (data.Length == 0)   
  •                 {   
  •                     break;   
  •                 }   
  •                 else  
  •                 {   
  •                     SendedCount++;   
  •                     //將接收到的數據包寫入到文件流對象   
  •                     MyFileStream.Write(data, 0, data.Length);   
  •                     //顯示已發送包的個數   
  •                     //MessageBox.Show("已發送包個數"+SendedCount.ToString());   
  •                 }   
  •             }   
  •   
  •             //關閉文件流   
  •             MyFileStream.Close();   
  •             //關閉套接字   
  •             client.Close();   
  •   
  •             //填加到dgv裡   
  •             //文件大小,IP,已發送包的個數,文件名,包的總量,最後一個包的大小   
  •             this.dataGridView1.Rows.Add(bagSize, clientep.Address, SendedCount, SendFileName, bagCount, bagLast);   
  •   
  •             //MessageBox.Show("文件接收完畢!");   
  •   
  •         }  
  •  
  •  
  •         #endregion  
  •  
  •  
  •  
  •         #region   攔截Windows消息,關閉窗體時執行   
  •         protected override void WndProc(ref   Message m)   
  •         {   
  •             const int WM_SYSCOMMAND = 0x0112;   
  •             const int SC_CLOSE = 0xF060;   
  •             if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)   
  •             {//捕捉關閉窗體消息      
  •                 //   User   clicked   close   button      
  •                 //this.WindowState = FormWindowState.Minimized;//把右上角紅叉關閉按鈕變最小化   
  •   
  •                 ServiceStop();   
  •             }   
  •             base.WndProc(ref   m);   
  •         }  
  •         #endregion  
  •  
  •  
  •         #region 停止服務   
  •   
  •         //停止服務   
  •         private void ServiceStop()   
  •         {   
  •             try  
  •             {   
  •   
  •             }   
  •             catch { }   
  •   
  •             try  
  •             {   
  •   
  •             }   
  •             catch { }   
  •         }  
  •  
  •         #endregion   
  •   
  •     }   
  • }  
  • 客戶端用來發送文件,選擇文件後點發送按鈕發送文件
    客戶端代碼:

     

    1. ////////////////////////////////////////////////////////////////////////////////   
    2. //title: 點對點文件傳輸程序                                           //   
    3. ////////////////////////////////////////////////////////////////////////////////   
    4.   
    5. //////////////////////////Begin-發送端//////////////////////////////////   
    6. using System;   
    7. using System.Drawing;   
    8. using System.Collections;   
    9. using System.ComponentModel;   
    10. using System.Windows.Forms;   
    11. using System.Data;   
    12. using System.IO;   
    13. using System.Net;   
    14. using System.Net.Sockets;   
    15. using System.Threading;   
    16.   
    17. namespace 發送端   
    18. {   
    19.     /// <summary>   
    20.     /// Form1 的摘要說明。   
    21.     /// </summary>   
    22.     public class Form1 : System.Windows.Forms.Form   
    23.     {   
    24.         private System.Windows.Forms.GroupBox groupBox1;   
    25.         private System.Windows.Forms.OpenFileDialog openFileDialog1;   
    26.         private System.Windows.Forms.TextBox textBox1;   
    27.         private System.Windows.Forms.Button button1;   
    28.         private System.Windows.Forms.Label label1;   
    29.         private System.Windows.Forms.TextBox textBox2;   
    30.         private System.Windows.Forms.Label label2;   
    31.         private System.Windows.Forms.TextBox textBox3;   
    32.         private System.Windows.Forms.GroupBox groupBox2;   
    33.         private System.Windows.Forms.Label label3;   
    34.         private System.Windows.Forms.TextBox textBox4;   
    35.         private System.Windows.Forms.Label label4;   
    36.         private System.Windows.Forms.TextBox textBox5;   
    37.         private System.Windows.Forms.GroupBox groupBox3;   
    38.         private System.Windows.Forms.GroupBox groupBox4;   
    39.         private System.Windows.Forms.Button button2;   
    40.         private System.Windows.Forms.Label label5;   
    41.         private System.Windows.Forms.TextBox textBox6;   
    42.         private System.Windows.Forms.Label label6;   
    43.         private System.Windows.Forms.Label label7;   
    44.         private System.Windows.Forms.ProgressBar progressBar1;   
    45.         private System.Windows.Forms.TextBox textBox7;   
    46.         private System.Windows.Forms.Label label8;   
    47.         private System.Windows.Forms.Label label9;   
    48.         private System.Windows.Forms.TextBox textBox8;   
    49.         private System.Windows.Forms.Label label10;   
    50.         private System.Windows.Forms.TextBox textBox9;   
    51.         private System.Windows.Forms.Label label11;   
    52.         private System.Windows.Forms.Label label12;   
    53.         private System.Windows.Forms.TextBox textBox10;   
    54.         /// <summary>   
    55.         /// 必需的設計器變量。   
    56.         /// </summary>   
    57.         private System.ComponentModel.Container components = null;   
    58.   
    59.         public Form1()   
    60.         {   
    61.             //   
    62.             // Windows 窗體設計器支持所必需的   
    63.             //   
    64.             InitializeComponent();   
    65.   
    66.             //   
    67.             // TODO: 在 InitializeComponent 調用後添加任何構造函數代碼   
    68.             //   
    69.         }   
    70.   
    71.         /// <summary>   
    72.         /// 清理所有正在使用的資源。   
    73.         /// </summary>   
    74.         protected override void Dispose( bool disposing )   
    75.         {   
    76.             if( disposing )   
    77.             {   
    78.                 if (components != null)    
    79.                 {   
    80.                     components.Dispose();   
    81.                 }   
    82.             }   
    83.             base.Dispose( disposing );   
    84.         }  
    85.  
    86.         #region Windows 窗體設計器生成的代碼   
    87.         /// <summary>   
    88.         /// 設計器支持所需的方法 - 不要使用代碼編輯器修改   
    89.         /// 此方法的內容。   
    90.         /// </summary>   
    91.         private void InitializeComponent()   
    92.         {   
    93.             this.groupBox1 = new System.Windows.Forms.GroupBox();   
    94.             this.textBox2 = new System.Windows.Forms.TextBox();   
    95.             this.textBox3 = new System.Windows.Forms.TextBox();   
    96.             this.label2 = new System.Windows.Forms.Label();   
    97.             this.label1 = new System.Windows.Forms.Label();   
    98.             this.button1 = new System.Windows.Forms.Button();   
    99.             this.textBox1 = new System.Windows.Forms.TextBox();   
    100.             this.label6 = new System.Windows.Forms.Label();   
    101.             this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();   
    102.             this.groupBox2 = new System.Windows.Forms.GroupBox();   
    103.             this.textBox6 = new System.Windows.Forms.TextBox();   
    104.             this.textBox5 = new System.Windows.Forms.TextBox();   
    105.             this.label4 = new System.Windows.Forms.Label();   
    106.             this.textBox4 = new System.Windows.Forms.TextBox();   
    107.             this.label3 = new System.Windows.Forms.Label();   
    108.             this.label5 = new System.Windows.Forms.Label();   
    109.             this.label9 = new System.Windows.Forms.Label();   
    110.             this.groupBox3 = new System.Windows.Forms.GroupBox();   
    111.             this.textBox8 = new System.Windows.Forms.TextBox();   
    112.             this.textBox9 = new System.Windows.Forms.TextBox();   
    113.             this.textBox7 = new System.Windows.Forms.TextBox();   
    114.             this.progressBar1 = new System.Windows.Forms.ProgressBar();   
    115.             this.label7 = new System.Windows.Forms.Label();   
    116.             this.label8 = new System.Windows.Forms.Label();   
    117.             this.label10 = new System.Windows.Forms.Label();   
    118.             this.label11 = new System.Windows.Forms.Label();   
    119.             this.label12 = new System.Windows.Forms.Label();   
    120.             this.textBox10 = new System.Windows.Forms.TextBox();   
    121.             this.groupBox4 = new System.Windows.Forms.GroupBox();   
    122.             this.button2 = new System.Windows.Forms.Button();   
    123.             this.groupBox1.SuspendLayout();   
    124.             this.groupBox2.SuspendLayout();   
    125.             this.groupBox3.SuspendLayout();   
    126.             this.groupBox4.SuspendLayout();   
    127.             this.SuspendLayout();   
    128.             //    
    129.             // groupBox1   
    130.             //    
    131.             this.groupBox1.Controls.Add(this.textBox2);   
    132.             this.groupBox1.Controls.Add(this.textBox3);   
    133.             this.groupBox1.Controls.Add(this.label2);   
    134.             this.groupBox1.Controls.Add(this.label1);   
    135.             this.groupBox1.Controls.Add(this.button1);   
    136.             this.groupBox1.Controls.Add(this.textBox1);   
    137.             this.groupBox1.Controls.Add(this.label6);   
    138.             this.groupBox1.Location = new System.Drawing.Point(0, 0);   
    139.             this.groupBox1.Name = "groupBox1";   
    140.             this.groupBox1.Size = new System.Drawing.Size(416, 96);   
    141.             this.groupBox1.TabIndex = 0;   
    142.             this.groupBox1.TabStop = false;   
    143.             this.groupBox1.Text = "文件信息";   
    144.             //    
    145.             // textBox2   
    146.             //    
    147.             this.textBox2.Location = new System.Drawing.Point(80, 40);   
    148.             this.textBox2.Name = "textBox2";   
    149.             this.textBox2.ReadOnly = true;   
    150.             this.textBox2.Size = new System.Drawing.Size(232, 21);   
    151.             this.textBox2.TabIndex = 3;   
    152.             //    
    153.             // textBox3   
    154.             //    
    155.             this.textBox3.Location = new System.Drawing.Point(80, 64);   
    156.             this.textBox3.Name = "textBox3";   
    157.             this.textBox3.ReadOnly = true;   
    158.             this.textBox3.Size = new System.Drawing.Size(136, 21);   
    159.             this.textBox3.TabIndex = 3;   
    160.             //    
    161.             // label2   
    162.             //    
    163.             this.label2.Location = new System.Drawing.Point(8, 72);   
    164.             this.label2.Name = "label2";   
    165.             this.label2.Size = new System.Drawing.Size(100, 16);   
    166.             this.label2.TabIndex = 4;   
    167.             this.label2.Text = "文件大小:";   
    168.             //    
    169.             // label1   
    170.             //    
    171.             this.label1.Location = new System.Drawing.Point(16, 48);   
    172.             this.label1.Name = "label1";   
    173.             this.label1.Size = new System.Drawing.Size(96, 16);   
    174.             this.label1.TabIndex = 2;   
    175.             this.label1.Text = "文件名:";   
    176.             //    
    177.             // button1   
    178.             //    
    179.             this.button1.Location = new System.Drawing.Point(320, 16);   
    180.             this.button1.Name = "button1";   
    181.             this.button1.Size = new System.Drawing.Size(88, 23);   
    182.             this.button1.TabIndex = 1;   
    183.             this.button1.Text = "浏覽";   
    184.             this.button1.Click += new System.EventHandler(this.button1_Click);   
    185.             //    
    186.             // textBox1   
    187.             //    
    188.             this.textBox1.Location = new System.Drawing.Point(8, 16);   
    189.             this.textBox1.Name = "textBox1";   
    190.             this.textBox1.ReadOnly = true;   
    191.             this.textBox1.Size = new System.Drawing.Size(304, 21);   
    192.             this.textBox1.TabIndex = 0;   
    193.             //    
    194.             // label6   
    195.             //    
    196.             this.label6.Location = new System.Drawing.Point(224, 72);   
    197.             this.label6.Name = "label6";   
    198.             this.label6.Size = new System.Drawing.Size(96, 16);   
    199.             this.label6.TabIndex = 2;   
    200.             this.label6.Text = "(單位:字節)";   
    201.             //    
    202.             // openFileDialog1   
    203.             //    
    204.             this.openFileDialog1.Filter = "所有文件|*.*";   
    205.             //    
    206.             // groupBox2   
    207.             //    
    208.             this.groupBox2.Controls.Add(this.textBox6);   
    209.             this.groupBox2.Controls.Add(this.textBox5);   
    210.             this.groupBox2.Controls.Add(this.label4);   
    211.             this.groupBox2.Controls.Add(this.textBox4);   
    212.             this.groupBox2.Controls.Add(this.label3);   
    213.             this.groupBox2.Controls.Add(this.label5);   
    214.             this.groupBox2.Controls.Add(this.label9);   
    215.             this.groupBox2.Location = new System.Drawing.Point(0, 96);   
    216.             this.groupBox2.Name = "groupBox2";   
    217.             this.groupBox2.Size = new System.Drawing.Size(416, 72);   
    218.             this.groupBox2.TabIndex = 1;   
    219.             this.groupBox2.TabStop = false;   
    220.             this.groupBox2.Text = "系統設置";   
    221.             //    
    222.             // textBox6   
    223.             //    
    224.             this.textBox6.Location = new System.Drawing.Point(96, 40);   
    225.             this.textBox6.Name = "textBox6";   
    226.             this.textBox6.Size = new System.Drawing.Size(72, 21);   
    227.             this.textBox6.TabIndex = 3;   
    228.             this.textBox6.Text = "50000";   
    229.             //    
    230.             // textBox5   
    231.             //    
    232.             this.textBox5.Location = new System.Drawing.Point(320, 16);   
    233.             this.textBox5.Name = "textBox5";   
    234.             this.textBox5.Size = new System.Drawing.Size(80, 21);   
    235.             this.textBox5.TabIndex = 3;   
    236.             this.textBox5.Text = "2005";   
    237.             //    
    238.             // label4   
    239.             //    
    240.             this.label4.Location = new System.Drawing.Point(256, 24);   
    241.             this.label4.Name = "label4";   
    242.             this.label4.Size = new System.Drawing.Size(100, 16);   
    243.             this.label4.TabIndex = 2;   
    244.             this.label4.Text = "傳輸端口:";   
    245.             //    
    246.             // textBox4   
    247.             //    
    248.             this.textBox4.Location = new System.Drawing.Point(96, 16);   
    249.             this.textBox4.Name = "textBox4";   
    250.             this.textBox4.ReadOnly = true;   
    251.             this.textBox4.Size = new System.Drawing.Size(144, 21);   
    252.             this.textBox4.TabIndex = 1;   
    253.             //    
    254.             // label3   
    255.             //    
    256.             this.label3.Location = new System.Drawing.Point(16, 24);   
    257.             this.label3.Name = "label3";   
    258.             this.label3.Size = new System.Drawing.Size(100, 16);   
    259.             this.label3.TabIndex = 0;   
    260.             this.label3.Text = "本機IP地址:";   
    261.             //    
    262.             // label5   
    263.             //    
    264.             this.label5.Location = new System.Drawing.Point(24, 48);   
    265.             this.label5.Name = "label5";   
    266.             this.label5.Size = new System.Drawing.Size(88, 16);   
    267.             this.label5.TabIndex = 2;   
    268.             this.label5.Text = "包的大小:";   
    269.             //    
    270.             // label9   
    271.             //    
    272.             this.label9.Location = new System.Drawing.Point(176, 48);   
    273.             this.label9.Name = "label9";   
    274.             this.label9.Size = new System.Drawing.Size(224, 16);   
    275.             this.label9.TabIndex = 2;   
    276.             this.label9.Text = "(范圍:10000 - 60000 單位:字節)";   
    277.             //    
    278.             // groupBox3   
    279.             //    
    280.             this.groupBox3.Controls.Add(this.textBox8);   
    281.             this.groupBox3.Controls.Add(this.textBox9);   
    282.             this.groupBox3.Controls.Add(this.textBox7);   
    283.             this.groupBox3.Controls.Add(this.progressBar1);   
    284.             this.groupBox3.Controls.Add(this.label7);   
    285.             this.groupBox3.Controls.Add(this.label8);   
    286.             this.groupBox3.Controls.Add(this.label10);   
    287.             this.groupBox3.Controls.Add(this.label11);   
    288.             this.groupBox3.Controls.Add(this.label12);   
    289.             this.groupBox3.Controls.Add(this.textBox10);   
    290.             this.groupBox3.Location = new System.Drawing.Point(0, 168);   
    291.             this.groupBox3.Name = "groupBox3";   
    292.             this.groupBox3.Size = new System.Drawing.Size(416, 168);   
    293.             this.groupBox3.TabIndex = 2;   
    294.             this.groupBox3.TabStop = false;   
    295.             this.groupBox3.Text = "狀態信息";   
    296.             //    
    297.             // textBox8   
    298.             //    
    299.             this.textBox8.Location = new System.Drawing.Point(120, 40);   
    300.             this.textBox8.Name = "textBox8";   
    301.             this.textBox8.ReadOnly = true;   
    302.             this.textBox8.Size = new System.Drawing.Size(160, 21);   
    303.             this.textBox8.TabIndex = 1;   
    304.             //    
    305.             // textBox9   
    306.             //    
    307.             this.textBox9.Location = new System.Drawing.Point(120, 64);   
    308.             this.textBox9.Name = "textBox9";   
    309.             this.textBox9.ReadOnly = true;   
    310.             this.textBox9.Size = new System.Drawing.Size(80, 21);   
    311.             this.textBox9.TabIndex = 1;   
    312.             //    
    313.             // textBox7   
    314.             //    
    315.             this.textBox7.Location = new System.Drawing.Point(120, 16);   
    316.             this.textBox7.Name = "textBox7";   
    317.             this.textBox7.ReadOnly = true;   
    318.             this.textBox7.Size = new System.Drawing.Size(160, 21);   
    319.             this.textBox7.TabIndex = 1;   
    320.             //    
    321.             // progressBar1   
    322.             //    
    323.             this.progressBar1.Location = new System.Drawing.Point(8, 136);   
    324.             this.progressBar1.Name = "progressBar1";   
    325.             this.progressBar1.Size = new System.Drawing.Size(400, 23);   
    326.             this.progressBar1.Step = 1;   
    327.             this.progressBar1.TabIndex = 3;   
    328.             //    
    329.             // label7   
    330.             //    
    331.             this.label7.Location = new System.Drawing.Point(32, 24);   
    332.             this.label7.Name = "label7";   
    333.             this.label7.Size = new System.Drawing.Size(96, 16);   
    334.             this.label7.TabIndex = 2;   
    335.             this.label7.Text = "接收端IP地址:";   
    336.             //    
    337.             // label8   
    338.             //    
    339.             this.label8.Location = new System.Drawing.Point(40, 48);   
    340.             this.label8.Name = "label8";   
    341.             this.label8.Size = new System.Drawing.Size(80, 16);   
    342.             this.label8.TabIndex = 2;   
    343.             this.label8.Text = "包的總數量:";   
    344.             //    
    345.             // label10   
    346.             //    
    347.             this.label10.Location = new System.Drawing.Point(8, 72);   
    348.             this.label10.Name = "label10";   
    349.             this.label10.Size = new System.Drawing.Size(120, 16);   
    350.             this.label10.TabIndex = 2;   
    351.             this.label10.Text = "最後一個包的大小:";   
    352.             //    
    353.             // label11   
    354.             //    
    355.             this.label11.Location = new System.Drawing.Point(200, 72);   
    356.             this.label11.Name = "label11";   
    357.             this.label11.Size = new System.Drawing.Size(96, 16);   
    358.             this.label11.TabIndex = 2;   
    359.             this.label11.Text = "(單位:字節)";   
    360.             //    
    361.             // label12   
    362.             //    
    363.             this.label12.Location = new System.Drawing.Point(16, 96);   
    364.             this.label12.Name = "label12";   
    365.             this.label12.Size = new System.Drawing.Size(104, 16);   
    366.             this.label12.TabIndex = 2;   
    367.             this.label12.Text = "已發送包的數量:";   
    368.             //    
    369.             // textBox10   
    370.             //    
    371.             this.textBox10.Location = new System.Drawing.Point(120, 88);   
    372.             this.textBox10.Name = "textBox10";   
    373.             this.textBox10.ReadOnly = true;   
    374.             this.textBox10.Size = new System.Drawing.Size(80, 21);   
    375.             this.textBox10.TabIndex = 1;   
    376.             //    
    377.             // groupBox4   
    378.             //    
    379.             this.groupBox4.Controls.Add(this.button2);   
    380.             this.groupBox4.Location = new System.Drawing.Point(0, 336);   
    381.             this.groupBox4.Name = "groupBox4";   
    382.             this.groupBox4.Size = new System.Drawing.Size(416, 48);   
    383.             this.groupBox4.TabIndex = 3;   
    384.             this.groupBox4.TabStop = false;   
    385.             this.groupBox4.Text = "系統控制";   
    386.             //    
    387.             // button2   
    388.             //    
    389.             this.button2.Location = new System.Drawing.Point(16, 16);   
    390.             this.button2.Name = "button2";   
    391.             this.button2.Size = new System.Drawing.Size(75, 23);   
    392.             this.button2.TabIndex = 0;   
    393.             this.button2.Text = "開始發送";   
    394.             this.button2.Click += new System.EventHandler(this.button2_Click);   
    395.             //    
    396.             // Form1   
    397.             //    
    398.             this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);   
    399.             this.ClientSize = new System.Drawing.Size(416, 389);   
    400.             this.Controls.Add(this.groupBox4);   
    401.             this.Controls.Add(this.groupBox3);   
    402.             this.Controls.Add(this.groupBox2);   
    403.             this.Controls.Add(this.groupBox1);   
    404.             this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;   
    405.             this.MaximizeBox = false;   
    406.             this.Name = "Form1";   
    407.             this.Text = "點對點文件傳輸軟體發送端";   
    408.             this.Load += new System.EventHandler(this.EzoneSend_Load);   
    409.             this.groupBox1.ResumeLayout(false);   
    410.             this.groupBox1.PerformLayout();   
    411.             this.groupBox2.ResumeLayout(false);   
    412.             this.groupBox2.PerformLayout();   
    413.             this.groupBox3.ResumeLayout(false);   
    414.             this.groupBox3.PerformLayout();   
    415.             this.groupBox4.ResumeLayout(false);   
    416.             this.ResumeLayout(false);   
    417.   
    418.         }  
    419.         #endregion   
    420.   
    421.         /// <summary>   
    422.         /// 應用程序的主入口點。   
    423.         /// </summary>   
    424.         [STAThread]   
    425.         static void Main()    
    426.         {   
    427.             Application.Run(new Form1());   
    428.         }   
    429.   
    430.         private void button1_Click(object sender, System.EventArgs e)   
    431.         {   
    432.             //選擇要進行傳輸的文件   
    433.             if(this.openFileDialog1.ShowDialog()==DialogResult.OK)   
    434.             {   
    435.                 FileInfo EzoneFile=new FileInfo(this.openFileDialog1.FileName);   
    436.                 this.textBox1.Text=EzoneFile.FullName;   
    437.                 this.textBox2.Text=EzoneFile.Name;   
    438.                 this.textBox3.Text=EzoneFile.Length.ToString();   
    439.                    
    440.             }   
    441.         }   
    442.   
    443.   
    444.         private void StartSend()   
    445.         {              
    446.             //創建一個文件對象   
    447.             FileInfo EzoneFile=new FileInfo(this.textBox1.Text);   
    448.             //打開文件流   
    449.             FileStream EzoneStream=EzoneFile.OpenRead();   
    450.             //包的大小   
    451.             int PacketSize=int.Parse(this.textBox6.Text);   
    452.             //包的數量   
    453.             int PacketCount=(int)(EzoneStream.Length/((long)PacketSize));   
    454.             this.textBox8.Text=PacketCount.ToString();   
    455.             this.progressBar1.Maximum=PacketCount;   
    456.             //最後一個包的大小   
    457.             int LastDataPacket=(int)(EzoneStream.Length-((long)(PacketSize*PacketCount)));   
    458.             this.textBox9.Text=LastDataPacket.ToString();   
    459.                
    460.             ////創建一個網絡端點   
    461.             //IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.1.136"), int.Parse(this.textBox5.Text));   
    462.   
    463.             ////MessageBox.Show(IPAddress.Any);   
    464.   
    465.             ////創建一個套接字   
    466.             //Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);   
    467.   
    468.             //MessageBox.Show(server.ToString());   
    469.   
    470.   
    471.   
    472.             //指向遠程服務端節點   
    473.             IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.1.136"), int.Parse(this.textBox5.Text));   
    474.             //創建套接字   
    475.             Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);   
    476.             //連接到發送端   
    477.             client.Connect(ipep);   
    478.   
    479.   
    480.   
    481.   
    482.   
    483.             ////綁定套接字到端口   
    484.             //client.Bind(ipep);   
    485.   
    486.             //MessageBox.Show(ipep.ToString());   
    487.   
    488.             ////開始偵聽(並堵塞該線程)   
    489.             //server.Listen(10);   
    490.             //確認連接   
    491.             //Socket client = server.Accept();   
    492.   
    493.             //MessageBox.Show(client.ToString());   
    494.   
    495.                
    496.   
    497.                
    498.   
    499.   
    500.   
    501.             //獲得客戶端節點對象   
    502.             IPEndPoint clientep=(IPEndPoint)client.RemoteEndPoint;   
    503.             //獲得客戶端的IP地址   
    504.             //this.textBox7.Text=clientep.Address.ToString();   
    505.             //發送[文件名]到客戶端   
    506.             CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name));   
    507.             //發送[包的大小]到客戶端   
    508.             CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(PacketSize.ToString()));   
    509.             //發送[包的總數量]到客戶端   
    510.             CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(PacketCount.ToString()));   
    511.             //發送[最後一個包的大小]到客戶端   
    512.             CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString()));   
    513.   
    514.             //數據包   
    515.             byte[] data=new byte[PacketSize];   
    516.             //開始循環發送數據包   
    517.             for(int i=0;i<PacketCount;i++)   
    518.             {   
    519.                 //從文件流讀取數據並填充數據包   
    520.                 EzoneStream.Read(data,0,data.Length);   
    521.                 //發送數據包   
    522.                 CommonModule.EzoneModule.SendVarData(client,data);   
    523.                 //顯示發送數據包的個數   
    524.                 this.textBox10.Text=((int)(i+1)).ToString();   
    525.                 //進度條值的顯示   
    526.                 this.progressBar1.PerformStep();   
    527.             }   
    528.   
    529.             //如果還有多余的數據包,則應該發送完畢!   
    530.             if(LastDataPacket!=0)   
    531.             {   
    532.                 data=new byte[LastDataPacket];   
    533.                 EzoneStream.Read(data,0,data.Length);   
    534.                 CommonModule.EzoneModule.SendVarData(client,data);   
    535.                 this.progressBar1.Value=this.progressBar1.Maximum;   
    536.             }   
    537.   
    538.             //關閉套接字   
    539.             client.Close();   
    540.             //server.Close();   
    541.             //關閉文件流   
    542.             EzoneStream.Close();   
    543.             this.button2.Enabled=true;   
    544.             MessageBox.Show("文件傳輸完畢!");   
    545.         }   
    546.   
    547.   
    548.         private void button2_Click(object sender, System.EventArgs e)   
    549.         {   
    550.             //開啟文件傳輸子線程   
    551.             Thread TempThread=new Thread(new ThreadStart(this.StartSend));   
    552.             TempThread.Start();   
    553.             this.button2.Enabled=false;   
    554.         }   
    555.   
    556.         private void EzoneSend_Load(object sender, System.EventArgs e)   
    557.         {   
    558.             //獲得本機的IP地址   
    559.             this.textBox4.Text=Dns.GetHostByName(Dns.GetHostName()).AddressList[0].ToString();   
    560.         }   
    561.     }   
    562. }  

    公共類,服務端客戶端都需要用到

     

  • ////////////////////////////Begin-公共模塊//////////////////////////////////////   
  •   
  •   
  • using System;   
  • using System.Collections.Generic;   
  • using System.Text;   
  •   
  • using System.Net;   
  • using System.Net.Sockets;   
  • using System.Windows.Forms;   
  •   
  • namespace TestSocketServerHSTF   
  • {   
  •     class TransferFiles   
  •     {   
  •         public TransferFiles()   
  •         {   
  •             //   
  •             // TODO: 在此處添加構造函數邏輯   
  •             //   
  •         }   
  •   
  •   
  •   
  •         public static int SendData(Socket s, byte[] data)   
  •         {   
  •             int total = 0;   
  •             int size = data.Length;   
  •             int dataleft = size;   
  •             int sent;   
  •   
  •             while (total < size)   
  •             {   
  •                 sent = s.Send(data, total, dataleft, SocketFlags.None);   
  •                 total += sent;   
  •                 dataleft -= sent;   
  •             }   
  •   
  •             return total;   
  •         }   
  •   
  •         public static byte[] ReceiveData(Socket s, int size)   
  •         {   
  •             int total = 0;   
  •             int dataleft = size;   
  •             byte[] data = new byte[size];   
  •             int recv;   
  •             while (total < size)   
  •             {   
  •                 recv = s.Receive(data, total, dataleft, SocketFlags.None);   
  •                 if (recv == 0)   
  •                 {   
  •                     data = null;   
  •                     break;   
  •                 }   
  •   
  •                 total += recv;   
  •                 dataleft -= recv;   
  •             }   
  •             return data;   
  •         }   
  •   
  •         public static int SendVarData(Socket s, byte[] data)   
  •         {   
  •             int total = 0;   
  •             int size = data.Length;   
  •             int dataleft = size;   
  •             int sent;   
  •             byte[] datasize = new byte[4];   
  •             datasize = BitConverter.GetBytes(size);   
  •             sent = s.Send(datasize);   
  •   
  •             while (total < size)   
  •             {   
  •                 sent = s.Send(data, total, dataleft, SocketFlags.None);   
  •                 total += sent;   
  •                 dataleft -= sent;   
  •             }   
  •   
  •             return total;   
  •         }   
  •   
  •         public static byte[] ReceiveVarData(Socket s)   
  •         {   
  •             int total = 0;   
  •             int recv;   
  •             byte[] datasize = new byte[4];   
  •             recv = s.Receive(datasize, 0, 4, SocketFlags.None);   
  •             int size = BitConverter.ToInt32(datasize, 0);   
  •             int dataleft = size;   
  •             byte[] data = new byte[size];   
  •             while (total < size)   
  •             {   
  •                 recv = s.Receive(data, total, dataleft, SocketFlags.None);   
  •                 if (recv == 0)   
  •                 {   
  •                     data = null;   
  •                     break;   
  •                 }   
  •                 total += recv;   
  •                 dataleft -= recv;   
  •             }   
  •             return data;   
  •         }   
  •     }   
  • }   
  •   
  •   
  •   
  •   
  • /////////////////////////////End-公共模塊///////////////////////////////////////  

  •  

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved