• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
服务器用来接收文件,不停的监听端口,有发送文件就马上开始接收文件
服务端代码:
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.             

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Objective-Cset/get方法发布时间:2022-07-14
下一篇:
Objectc的NSString的使用,创建,拼接和分隔,子string,substring发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap