zoukankan      html  css  js  c++  java
  • c# winform 端口监听和文件的传输

                                                          c# winform 端口监听和文件的传输

    不说那么多 直接上代码 代码中有注释

    服务器用来接收文件,不停的监听端口,有发送文件就马上开始接收文件
    服务端代码:

    代码
    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

    }
    }

    客户端用来发送文件,选择文件后点发送按钮发送文件
    客户端代码:

    代码
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.IO;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;

    namespace 发送端
    {
    /// <summary>
    /// Form1 的摘要说明。
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
    private System.Windows.Forms.GroupBox groupBox1;
    private System.Windows.Forms.OpenFileDialog openFileDialog1;
    private System.Windows.Forms.TextBox textBox1;
    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.TextBox textBox2;
    private System.Windows.Forms.Label label2;
    private System.Windows.Forms.TextBox textBox3;
    private System.Windows.Forms.GroupBox groupBox2;
    private System.Windows.Forms.Label label3;
    private System.Windows.Forms.TextBox textBox4;
    private System.Windows.Forms.Label label4;
    private System.Windows.Forms.TextBox textBox5;
    private System.Windows.Forms.GroupBox groupBox3;
    private System.Windows.Forms.GroupBox groupBox4;
    private System.Windows.Forms.Button button2;
    private System.Windows.Forms.Label label5;
    private System.Windows.Forms.TextBox textBox6;
    private System.Windows.Forms.Label label6;
    private System.Windows.Forms.Label label7;
    private System.Windows.Forms.ProgressBar progressBar1;
    private System.Windows.Forms.TextBox textBox7;
    private System.Windows.Forms.Label label8;
    private System.Windows.Forms.Label label9;
    private System.Windows.Forms.TextBox textBox8;
    private System.Windows.Forms.Label label10;
    private System.Windows.Forms.TextBox textBox9;
    private System.Windows.Forms.Label label11;
    private System.Windows.Forms.Label label12;
    private System.Windows.Forms.TextBox textBox10;
    /// <summary>
    /// 必需的设计器变量。
    /// </summary>
    private System.ComponentModel.Container components = null;

    public Form1()
    {
    //
    // Windows 窗体设计器支持所必需的
    //
    InitializeComponent();

    //
    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
    //
    }

    /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if (components != null)
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    }

    #region Windows 窗体设计器生成的代码
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.groupBox1 = new System.Windows.Forms.GroupBox();
    this.textBox2 = new System.Windows.Forms.TextBox();
    this.textBox3 = new System.Windows.Forms.TextBox();
    this.label2 = new System.Windows.Forms.Label();
    this.label1 = new System.Windows.Forms.Label();
    this.button1 = new System.Windows.Forms.Button();
    this.textBox1 = new System.Windows.Forms.TextBox();
    this.label6 = new System.Windows.Forms.Label();
    this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
    this.groupBox2 = new System.Windows.Forms.GroupBox();
    this.textBox6 = new System.Windows.Forms.TextBox();
    this.textBox5 = new System.Windows.Forms.TextBox();
    this.label4 = new System.Windows.Forms.Label();
    this.textBox4 = new System.Windows.Forms.TextBox();
    this.label3 = new System.Windows.Forms.Label();
    this.label5 = new System.Windows.Forms.Label();
    this.label9 = new System.Windows.Forms.Label();
    this.groupBox3 = new System.Windows.Forms.GroupBox();
    this.textBox8 = new System.Windows.Forms.TextBox();
    this.textBox9 = new System.Windows.Forms.TextBox();
    this.textBox7 = new System.Windows.Forms.TextBox();
    this.progressBar1 = new System.Windows.Forms.ProgressBar();
    this.label7 = new System.Windows.Forms.Label();
    this.label8 = new System.Windows.Forms.Label();
    this.label10 = new System.Windows.Forms.Label();
    this.label11 = new System.Windows.Forms.Label();
    this.label12 = new System.Windows.Forms.Label();
    this.textBox10 = new System.Windows.Forms.TextBox();
    this.groupBox4 = new System.Windows.Forms.GroupBox();
    this.button2 = new System.Windows.Forms.Button();
    this.groupBox1.SuspendLayout();
    this.groupBox2.SuspendLayout();
    this.groupBox3.SuspendLayout();
    this.groupBox4.SuspendLayout();
    this.SuspendLayout();
    //
    // groupBox1
    //
    this.groupBox1.Controls.Add(this.textBox2);
    this.groupBox1.Controls.Add(this.textBox3);
    this.groupBox1.Controls.Add(this.label2);
    this.groupBox1.Controls.Add(this.label1);
    this.groupBox1.Controls.Add(this.button1);
    this.groupBox1.Controls.Add(this.textBox1);
    this.groupBox1.Controls.Add(this.label6);
    this.groupBox1.Location = new System.Drawing.Point(0, 0);
    this.groupBox1.Name = "groupBox1";
    this.groupBox1.Size = new System.Drawing.Size(416, 96);
    this.groupBox1.TabIndex = 0;
    this.groupBox1.TabStop = false;
    this.groupBox1.Text = "文件信息";
    //
    // textBox2
    //
    this.textBox2.Location = new System.Drawing.Point(80, 40);
    this.textBox2.Name = "textBox2";
    this.textBox2.ReadOnly = true;
    this.textBox2.Size = new System.Drawing.Size(232, 21);
    this.textBox2.TabIndex = 3;
    //
    // textBox3
    //
    this.textBox3.Location = new System.Drawing.Point(80, 64);
    this.textBox3.Name = "textBox3";
    this.textBox3.ReadOnly = true;
    this.textBox3.Size = new System.Drawing.Size(136, 21);
    this.textBox3.TabIndex = 3;
    //
    // label2
    //
    this.label2.Location = new System.Drawing.Point(8, 72);
    this.label2.Name = "label2";
    this.label2.Size = new System.Drawing.Size(100, 16);
    this.label2.TabIndex = 4;
    this.label2.Text = "文件大小:";
    //
    // label1
    //
    this.label1.Location = new System.Drawing.Point(16, 48);
    this.label1.Name = "label1";
    this.label1.Size = new System.Drawing.Size(96, 16);
    this.label1.TabIndex = 2;
    this.label1.Text = "文件名:";
    //
    // button1
    //
    this.button1.Location = new System.Drawing.Point(320, 16);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(88, 23);
    this.button1.TabIndex = 1;
    this.button1.Text = "浏览";
    this.button1.Click += new System.EventHandler(this.button1_Click);
    //
    // textBox1
    //
    this.textBox1.Location = new System.Drawing.Point(8, 16);
    this.textBox1.Name = "textBox1";
    this.textBox1.ReadOnly = true;
    this.textBox1.Size = new System.Drawing.Size(304, 21);
    this.textBox1.TabIndex = 0;
    //
    // label6
    //
    this.label6.Location = new System.Drawing.Point(224, 72);
    this.label6.Name = "label6";
    this.label6.Size = new System.Drawing.Size(96, 16);
    this.label6.TabIndex = 2;
    this.label6.Text = "(单位:字节)";
    //
    // openFileDialog1
    //
    this.openFileDialog1.Filter = "所有文件|*.*";
    //
    // groupBox2
    //
    this.groupBox2.Controls.Add(this.textBox6);
    this.groupBox2.Controls.Add(this.textBox5);
    this.groupBox2.Controls.Add(this.label4);
    this.groupBox2.Controls.Add(this.textBox4);
    this.groupBox2.Controls.Add(this.label3);
    this.groupBox2.Controls.Add(this.label5);
    this.groupBox2.Controls.Add(this.label9);
    this.groupBox2.Location = new System.Drawing.Point(0, 96);
    this.groupBox2.Name = "groupBox2";
    this.groupBox2.Size = new System.Drawing.Size(416, 72);
    this.groupBox2.TabIndex = 1;
    this.groupBox2.TabStop = false;
    this.groupBox2.Text = "系统设置";
    //
    // textBox6
    //
    this.textBox6.Location = new System.Drawing.Point(96, 40);
    this.textBox6.Name = "textBox6";
    this.textBox6.Size = new System.Drawing.Size(72, 21);
    this.textBox6.TabIndex = 3;
    this.textBox6.Text = "50000";
    //
    // textBox5
    //
    this.textBox5.Location = new System.Drawing.Point(320, 16);
    this.textBox5.Name = "textBox5";
    this.textBox5.Size = new System.Drawing.Size(80, 21);
    this.textBox5.TabIndex = 3;
    this.textBox5.Text = "2005";
    //
    // label4
    //
    this.label4.Location = new System.Drawing.Point(256, 24);
    this.label4.Name = "label4";
    this.label4.Size = new System.Drawing.Size(100, 16);
    this.label4.TabIndex = 2;
    this.label4.Text = "传输端口:";
    //
    // textBox4
    //
    this.textBox4.Location = new System.Drawing.Point(96, 16);
    this.textBox4.Name = "textBox4";
    this.textBox4.ReadOnly = true;
    this.textBox4.Size = new System.Drawing.Size(144, 21);
    this.textBox4.TabIndex = 1;
    //
    // label3
    //
    this.label3.Location = new System.Drawing.Point(16, 24);
    this.label3.Name = "label3";
    this.label3.Size = new System.Drawing.Size(100, 16);
    this.label3.TabIndex = 0;
    this.label3.Text = "本机IP地址:";
    //
    // label5
    //
    this.label5.Location = new System.Drawing.Point(24, 48);
    this.label5.Name = "label5";
    this.label5.Size = new System.Drawing.Size(88, 16);
    this.label5.TabIndex = 2;
    this.label5.Text = "包的大小:";
    //
    // label9
    //
    this.label9.Location = new System.Drawing.Point(176, 48);
    this.label9.Name = "label9";
    this.label9.Size = new System.Drawing.Size(224, 16);
    this.label9.TabIndex = 2;
    this.label9.Text = "(范围:10000 - 60000 单位:字节)";
    //
    // groupBox3
    //
    this.groupBox3.Controls.Add(this.textBox8);
    this.groupBox3.Controls.Add(this.textBox9);
    this.groupBox3.Controls.Add(this.textBox7);
    this.groupBox3.Controls.Add(this.progressBar1);
    this.groupBox3.Controls.Add(this.label7);
    this.groupBox3.Controls.Add(this.label8);
    this.groupBox3.Controls.Add(this.label10);
    this.groupBox3.Controls.Add(this.label11);
    this.groupBox3.Controls.Add(this.label12);
    this.groupBox3.Controls.Add(this.textBox10);
    this.groupBox3.Location = new System.Drawing.Point(0, 168);
    this.groupBox3.Name = "groupBox3";
    this.groupBox3.Size = new System.Drawing.Size(416, 168);
    this.groupBox3.TabIndex = 2;
    this.groupBox3.TabStop = false;
    this.groupBox3.Text = "状态信息";
    //
    // textBox8
    //
    this.textBox8.Location = new System.Drawing.Point(120, 40);
    this.textBox8.Name = "textBox8";
    this.textBox8.ReadOnly = true;
    this.textBox8.Size = new System.Drawing.Size(160, 21);
    this.textBox8.TabIndex = 1;
    //
    // textBox9
    //
    this.textBox9.Location = new System.Drawing.Point(120, 64);
    this.textBox9.Name = "textBox9";
    this.textBox9.ReadOnly = true;
    this.textBox9.Size = new System.Drawing.Size(80, 21);
    this.textBox9.TabIndex = 1;
    //
    // textBox7
    //
    this.textBox7.Location = new System.Drawing.Point(120, 16);
    this.textBox7.Name = "textBox7";
    this.textBox7.ReadOnly = true;
    this.textBox7.Size = new System.Drawing.Size(160, 21);
    this.textBox7.TabIndex = 1;
    //
    // progressBar1
    //
    this.progressBar1.Location = new System.Drawing.Point(8, 136);
    this.progressBar1.Name = "progressBar1";
    this.progressBar1.Size = new System.Drawing.Size(400, 23);
    this.progressBar1.Step = 1;
    this.progressBar1.TabIndex = 3;
    //
    // label7
    //
    this.label7.Location = new System.Drawing.Point(32, 24);
    this.label7.Name = "label7";
    this.label7.Size = new System.Drawing.Size(96, 16);
    this.label7.TabIndex = 2;
    this.label7.Text = "接收端IP地址:";
    //
    // label8
    //
    this.label8.Location = new System.Drawing.Point(40, 48);
    this.label8.Name = "label8";
    this.label8.Size = new System.Drawing.Size(80, 16);
    this.label8.TabIndex = 2;
    this.label8.Text = "包的总数量:";
    //
    // label10
    //
    this.label10.Location = new System.Drawing.Point(8, 72);
    this.label10.Name = "label10";
    this.label10.Size = new System.Drawing.Size(120, 16);
    this.label10.TabIndex = 2;
    this.label10.Text = "最后一个包的大小:";
    //
    // label11
    //
    this.label11.Location = new System.Drawing.Point(200, 72);
    this.label11.Name = "label11";
    this.label11.Size = new System.Drawing.Size(96, 16);
    this.label11.TabIndex = 2;
    this.label11.Text = "(单位:字节)";
    //
    // label12
    //
    this.label12.Location = new System.Drawing.Point(16, 96);
    this.label12.Name = "label12";
    this.label12.Size = new System.Drawing.Size(104, 16);
    this.label12.TabIndex = 2;
    this.label12.Text = "已发送包的数量:";
    //
    // textBox10
    //
    this.textBox10.Location = new System.Drawing.Point(120, 88);
    this.textBox10.Name = "textBox10";
    this.textBox10.ReadOnly = true;
    this.textBox10.Size = new System.Drawing.Size(80, 21);
    this.textBox10.TabIndex = 1;
    //
    // groupBox4
    //
    this.groupBox4.Controls.Add(this.button2);
    this.groupBox4.Location = new System.Drawing.Point(0, 336);
    this.groupBox4.Name = "groupBox4";
    this.groupBox4.Size = new System.Drawing.Size(416, 48);
    this.groupBox4.TabIndex = 3;
    this.groupBox4.TabStop = false;
    this.groupBox4.Text = "系统控制";
    //
    // button2
    //
    this.button2.Location = new System.Drawing.Point(16, 16);
    this.button2.Name = "button2";
    this.button2.Size = new System.Drawing.Size(75, 23);
    this.button2.TabIndex = 0;
    this.button2.Text = "开始发送";
    this.button2.Click += new System.EventHandler(this.button2_Click);
    //
    // Form1
    //
    this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
    this.ClientSize = new System.Drawing.Size(416, 389);
    this.Controls.Add(this.groupBox4);
    this.Controls.Add(this.groupBox3);
    this.Controls.Add(this.groupBox2);
    this.Controls.Add(this.groupBox1);
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
    this.MaximizeBox = false;
    this.Name = "Form1";
    this.Text = "点对点文件传输软体发送端";
    this.Load += new System.EventHandler(this.EzoneSend_Load);
    this.groupBox1.ResumeLayout(false);
    this.groupBox1.PerformLayout();
    this.groupBox2.ResumeLayout(false);
    this.groupBox2.PerformLayout();
    this.groupBox3.ResumeLayout(false);
    this.groupBox3.PerformLayout();
    this.groupBox4.ResumeLayout(false);
    this.ResumeLayout(false);

    }
    #endregion

    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main()
    {
    Application.Run(
    new Form1());
    }

    private void button1_Click(object sender, System.EventArgs e)
    {
    //选择要进行传输的文件
    if(this.openFileDialog1.ShowDialog()==DialogResult.OK)
    {
    FileInfo EzoneFile
    =new FileInfo(this.openFileDialog1.FileName);
    this.textBox1.Text=EzoneFile.FullName;
    this.textBox2.Text=EzoneFile.Name;
    this.textBox3.Text=EzoneFile.Length.ToString();

    }
    }


    private void StartSend()
    {
    //创建一个文件对象
    FileInfo EzoneFile=new FileInfo(this.textBox1.Text);
    //打开文件流
    FileStream EzoneStream=EzoneFile.OpenRead();
    //包的大小
    int PacketSize=int.Parse(this.textBox6.Text);
    //包的数量
    int PacketCount=(int)(EzoneStream.Length/((long)PacketSize));
    this.textBox8.Text=PacketCount.ToString();
    this.progressBar1.Maximum=PacketCount;
    //最后一个包的大小
    int LastDataPacket=(int)(EzoneStream.Length-((long)(PacketSize*PacketCount)));
    this.textBox9.Text=LastDataPacket.ToString();

    ////创建一个网络端点
    //IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.1.136"), int.Parse(this.textBox5.Text));

    ////MessageBox.Show(IPAddress.Any);

    ////创建一个套接字
    //Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    //MessageBox.Show(server.ToString());



    //指向远程服务端节点
    IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.1.136"), int.Parse(this.textBox5.Text));
    //创建套接字
    Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    //连接到发送端
    client.Connect(ipep);





    ////绑定套接字到端口
    //client.Bind(ipep);

    //MessageBox.Show(ipep.ToString());

    ////开始侦听(并堵塞该线程)
    //server.Listen(10);
    //确认连接
    //Socket client = server.Accept();

    //MessageBox.Show(client.ToString());







    //获得客户端节点对象
    IPEndPoint clientep=(IPEndPoint)client.RemoteEndPoint;
    //获得客户端的IP地址
    //this.textBox7.Text=clientep.Address.ToString();
    //发送[文件名]到客户端
    CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name));
    //发送[包的大小]到客户端
    CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(PacketSize.ToString()));
    //发送[包的总数量]到客户端
    CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(PacketCount.ToString()));
    //发送[最后一个包的大小]到客户端
    CommonModule.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString()));

    //数据包
    byte[] data=new byte[PacketSize];
    //开始循环发送数据包
    for(int i=0;i<PacketCount;i++)
    {
    //从文件流读取数据并填充数据包
    EzoneStream.Read(data,0,data.Length);
    //发送数据包
    CommonModule.EzoneModule.SendVarData(client,data);
    //显示发送数据包的个数
    this.textBox10.Text=((int)(i+1)).ToString();
    //进度条值的显示
    this.progressBar1.PerformStep();
    }

    //如果还有多余的数据包,则应该发送完毕!
    if(LastDataPacket!=0)
    {
    data
    =new byte[LastDataPacket];
    EzoneStream.Read(data,
    0,data.Length);
    CommonModule.EzoneModule.SendVarData(client,data);
    this.progressBar1.Value=this.progressBar1.Maximum;
    }

    //关闭套接字
    client.Close();
    //server.Close();
    //关闭文件流
    EzoneStream.Close();
    this.button2.Enabled=true;
    MessageBox.Show(
    "文件传输完毕!");
    }


    private void button2_Click(object sender, System.EventArgs e)
    {
    //开启文件传输子线程
    Thread TempThread=new Thread(new ThreadStart(this.StartSend));
    TempThread.Start();
    this.button2.Enabled=false;
    }

    private void EzoneSend_Load(object sender, System.EventArgs e)
    {
    //获得本机的IP地址
    this.textBox4.Text=Dns.GetHostByName(Dns.GetHostName()).AddressList[0].ToString();
    }
    }
    }

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

    代码
    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;
    }
    }
    }
  • 相关阅读:
    php自动跳转中英文页面
    如何让一个层关闭之后,就算刷新页面了也不显示。除非关闭页面再次打开
    彻底杜绝warning: Cannot add header information headers already sent in......
    大三了
    X牛人關於編程語錄
    C++虚函数表解析
    epoll:Edge or Level Triggered
    LRU和LFU的区别
    会话、进程组与僵死进程
    Effective C++学习笔记:确定基类有虚析构函数
  • 原文地址:https://www.cnblogs.com/Mr_JinRui/p/1723056.html
Copyright © 2011-2022 走看看