• c# winform socket网络编程,点对点传输文件,socket文件传输,监听端口


    服务器用来接收文件,不停的监听端口,有发送文件就马上开始接收文件
    服务端代码:
    C#代码 复制代码
    1. using System;   
    2. using System.Collections.Generic;   
    3. using System.ComponentModel;   
    4. using System.Data;   
    5. using System.Drawing;   
    6. using System.Text;   
    7. using System.Windows.Forms;   
    8.   
    9.   
    10. using System.Net;   
    11. using System.Threading;   
    12. using System.Net.Sockets;   
    13.   
    14. using System.IO;   
    15.   
    16. namespace TestSocketServerHSTF   
    17. {   
    18.     public partial class Form1 : Form   
    19.     {   
    20.         public Form1()   
    21.         {   
    22.             InitializeComponent();   
    23.   
    24.   
    25.             //不显示出dataGridView1的最后一行空白   
    26.             dataGridView1.AllowUserToAddRows = false;   
    27.         }  
    28.  
    29.  
    30.         #region 定义变量  
    31.  
    32.  
    33.         #endregion  
    34.  
    35.  
    36.  
    37.         #region 进入窗体即启动服务   
    38.   
    39.         private void Form1_Load(object sender, EventArgs e)   
    40.         {   
    41.             //开启接收线程   
    42.             Thread TempThread = new Thread(new ThreadStart(this.StartReceive));   
    43.             TempThread.Start();   
    44.         }  
    45.  
    46.           
    47.         #endregion  
    48.  
    49.  
    50.  
    51.         #region 功能函数   
    52.   
    53.         private void StartReceive()   
    54.         {   
    55.             //创建一个网络端点   
    56.             IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse("2005"));   
    57.   
    58.             //MessageBox.Show(IPAddress.Any);   
    59.   
    60.             //创建一个套接字   
    61.             Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);   
    62.   
    63.             //绑定套接字到端口   
    64.             server.Bind(ipep);   
    65.   
    66.             //开始侦听(并堵塞该线程)   
    67.             server.Listen(10);   
    68.   
    69.             //确认连接   
    70.             Socket client = server.Accept();   
    71.   
    72.             //获得客户端节点对象   
    73.             IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;   
    74.                
    75.   
    76.   
    77.             //获得[文件名]   
    78.             string SendFileName = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));   
    79.             //MessageBox.Show("文件名" + SendFileName);   
    80.   
    81.             //获得[包的大小]   
    82.             string bagSize = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));   
    83.             //MessageBox.Show("包大小" + bagSize);   
    84.   
    85.             //获得[包的总数量]   
    86.             int bagCount = int.Parse(System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client)));   
    87.             //MessageBox.Show("包的总数量" + bagCount);   
    88.   
    89.             //获得[最后一个包的大小]   
    90.             string bagLast = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));   
    91.             //MessageBox.Show("最后一个包的大小" + bagLast);   
    92.   
    93.             //创建一个新文件   
    94.             FileStream MyFileStream = new FileStream(SendFileName, FileMode.Create, FileAccess.Write);   
    95.   
    96.             //已发送包的个数   
    97.             int SendedCount = 0;   
    98.   
    99.             while (true)   
    100.             {   
    101.                 byte[] data = TransferFiles.ReceiveVarData(client);   
    102.                 if (data.Length == 0)   
    103.                 {   
    104.                     break;   
    105.                 }   
    106.                 else  
    107.                 {   
    108.                     SendedCount++;   
    109.                     //将接收到的数据包写入到文件流对象   
    110.                     MyFileStream.Write(data, 0, data.Length);   
    111.                     //显示已发送包的个数   
    112.                     //MessageBox.Show("已发送包个数"+SendedCount.ToString());   
    113.                 }   
    114.             }   
    115.   
    116.             //关闭文件流   
    117.             MyFileStream.Close();   
    118.             //关闭套接字   
    119.             client.Close();   
    120.   
    121.             //填加到dgv里   
    122.             //文件大小,IP,已发送包的个数,文件名,包的总量,最后一个包的大小   
    123.             this.dataGridView1.Rows.Add(bagSize, clientep.Address, SendedCount, SendFileName, bagCount, bagLast);   
    124.   
    125.             //MessageBox.Show("文件接收完毕!");   
    126.   
    127.         }  
    128.  
    129.  
    130.         #endregion  
    131.  
    132.  
    133.  
    134.         #region   拦截Windows消息,关闭窗体时执行   
    135.         protected override void WndProc(ref   Message m)   
    136.         {   
    137.             const int WM_SYSCOMMAND = 0x0112;   
    138.             const int SC_CLOSE = 0xF060;   
    139.             if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)   
    140.             {//捕捉关闭窗体消息      
    141.                 //   User   clicked   close   button      
    142.                 //this.WindowState = FormWindowState.Minimized;//把右上角红叉关闭按钮变最小化   
    143.   
    144.                 ServiceStop();   
    145.             }   
    146.             base.WndProc(ref   m);   
    147.         }  
    148.         #endregion  
    149.  
    150.  
    151.         #region 停止服务   
    152.   
    153.         //停止服务   
    154.         private void ServiceStop()   
    155.         {   
    156.             try  
    157.             {   
    158.   
    159.             }   
    160.             catch { }   
    161.   
    162.             try  
    163.             {   
    164.   
    165.             }   
    166.             catch { }   
    167.         }  
    168.  
    169.         #endregion   
    170.   
    171.     }   
    172. }  

    客户端用来发送文件,选择文件后点发送按钮发送文件
    客户端代码:
    C#代码 复制代码
    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. }  




    公共类,服务端客户端都需要用到

    C#代码 复制代码
    1. ////////////////////////////Begin-公共模块//////////////////////////////////////   
    2.   
    3.   
    4. using System;   
    5. using System.Collections.Generic;   
    6. using System.Text;   
    7.   
    8. using System.Net;   
    9. using System.Net.Sockets;   
    10. using System.Windows.Forms;   
    11.   
    12. namespace TestSocketServerHSTF   
    13. {   
    14.     class TransferFiles   
    15.     {   
    16.         public TransferFiles()   
    17.         {   
    18.             //   
    19.             // TODO: 在此处添加构造函数逻辑   
    20.             //   
    21.         }   
    22.   
    23.   
    24.   
    25.         public static int SendData(Socket s, byte[] data)   
    26.         {   
    27.             int total = 0;   
    28.             int size = data.Length;   
    29.             int dataleft = size;   
    30.             int sent;   
    31.   
    32.             while (total < size)   
    33.             {   
    34.                 sent = s.Send(data, total, dataleft, SocketFlags.None);   
    35.                 total += sent;   
    36.                 dataleft -= sent;   
    37.             }   
    38.   
    39.             return total;   
    40.         }   
    41.   
    42.         public static byte[] ReceiveData(Socket s, int size)   
    43.         {   
    44.             int total = 0;   
    45.             int dataleft = size;   
    46.             byte[] data = new byte[size];   
    47.             int recv;   
    48.             while (total < size)   
    49.             {   
    50.                 recv = s.Receive(data, total, dataleft, SocketFlags.None);   
    51.                 if (recv == 0)   
    52.                 {   
    53.                     data = null;   
    54.                     break;   
    55.                 }   
    56.   
    57.                 total += recv;   
    58.                 dataleft -= recv;   
    59.             }   
    60.             return data;   
    61.         }   
    62.   
    63.         public static int SendVarData(Socket s, byte[] data)   
    64.         {   
    65.             int total = 0;   
    66.             int size = data.Length;   
    67.             int dataleft = size;   
    68.             int sent;   
    69.             byte[] datasize = new byte[4];   
    70.             datasize = BitConverter.GetBytes(size);   
    71.             sent = s.Send(datasize);   
    72.   
    73.             while (total < size)   
    74.             {   
    75.                 sent = s.Send(data, total, dataleft, SocketFlags.None);   
    76.                 total += sent;   
    77.                 dataleft -= sent;   
    78.             }   
    79.   
    80.             return total;   
    81.         }   
    82.   
    83.         public static byte[] ReceiveVarData(Socket s)   
    84.         {   
    85.             int total = 0;   
    86.             int recv;   
    87.             byte[] datasize = new byte[4];   
    88.             recv = s.Receive(datasize, 0, 4, SocketFlags.None);   
    89.             int size = BitConverter.ToInt32(datasize, 0);   
    90.             int dataleft = size;   
    91.             byte[] data = new byte[size];   
    92.             while (total < size)   
    93.             {   
    94.                 recv = s.Receive(data, total, dataleft, SocketFlags.None);   
    95.                 if (recv == 0)   
    96.                 {   
    97.                     data = null;   
    98.                     break;   
    99.                 }   
    100.                 total += recv;   
    101.                 dataleft -= recv;   
    102.             }   
    103.             return data;   
    104.         }   
    105.     }   
    106. }   
    107.   
    108.   
    109.   
    110.   
    111. /////////////////////////////End-公共模块///////////////////////////////////////  



  • 相关阅读:
    基于API函数的串口通信编程——理解(转)
    如何设置超时参数(串行通讯)
    注册热键——RegisterHotKey
    如何制作OEM包 (转帖)
    CreateThread函数创建线程
    WinCe6.0 播放语音问题
    C语言编写图形程序// http://lcrystal.spaces.live.com/blog/cns!13dfc6235bbfb72c!128.entry
    关于串口编程的读书笔记
    c++中内存管理
    MFC读取TXT文件,写入编辑框
  • 原文地址:https://www.cnblogs.com/jordan2009/p/1553594.html
Copyright © 2020-2023  润新知