• .net 中使用socket (c#)


    前几天在网上看到关于使用socket 编写聊天程序的一个例子,学习了一下,网上的例子是VB.NET的,自己改写成了C#的 大同小异,只作为记录 :

    发送端
    ================================
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
     
    namespace CSClientTest
    {
         ///<summary>
         /// sendform 的摘要说明。
         ///</summary>
         public class sendform : System.Windows.Forms.Form
         {
             private System.Windows.Forms.TextBox textBox1;
             private System.Windows.Forms.Button button1;
             private System.Windows.Forms.Label label1;
             ///<summary>
             ///必需的设计器变量。
             ///</summary>
             private System.ComponentModel.Container components = null;
     
             public sendform()
             {
                  //
                  // 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.textBox1 = new System.Windows.Forms.TextBox();
                  this.button1 = new System.Windows.Forms.Button();
                  this.label1 = new System.Windows.Forms.Label();
                  this.SuspendLayout();
                  //
                  // textBox1
                  //
                  this.textBox1.Location = new System.Drawing.Point(96, 144);
                  this.textBox1.Name = "textBox1";
                  this.textBox1.Size = new System.Drawing.Size(200, 21);
                  this.textBox1.TabIndex = 0;
                  this.textBox1.Text = "";
                  //
                  // button1
                  //
                  this.button1.Location = new System.Drawing.Point(320, 144);
                  this.button1.Name = "button1";
                  this.button1.TabIndex = 1;
                  this.button1.Text = "sender";
                  this.button1.Click += new System.EventHandler(this.button1_Click);
                  //
                  // label1
                  //
                  this.label1.Location = new System.Drawing.Point(0, 0);
                  this.label1.Name = "label1";
                  this.label1.Size = new System.Drawing.Size(608, 112);
                  this.label1.TabIndex = 2;
                  //
                  // sendform
                  //
                  this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
                  this.ClientSize = new System.Drawing.Size(616, 238);
                  this.Controls.Add(this.label1);
                  this.Controls.Add(this.button1);
                  this.Controls.Add(this.textBox1);
                  this.Name = "sendform";
                  this.Text = "sendform";
                  this.Load += new System.EventHandler(this.sendform_Load);
                  this.ResumeLayout(false);
     
             }
             #endregion
     
             private void sendform_Load(object sender, System.EventArgs e)
             {
                 
             }
     
             private void button1_Click(object sender, System.EventArgs e)
             {
                  //定义一个socket对象
                  System.Net.Sockets.Socket socket= new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,System.Net.Sockets.SocketType.Stream,System.Net.Sockets.ProtocolType.Tcp);
                 
                  //定义一个字节数组
                  byte[] b = new byte[1024];
                 
                  //从文本框中获得数据转换为字节数组后存入b
                  b=System.Text.Encoding.UTF8.GetBytes(textBox1.Text);
                 
                  //定义目的端的IP和端口
                  System.Net.IPEndPoint ep = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"),1022);
     
                  try
                  {
                       //连接到目的端
                       socket.Connect(ep);
     
                       //用socket的send方法发送数据,该方法返回发送的数据的字节数
                       label1.Text="数据已发送,总共:"+socket.Send(b).ToString()+"字节";
                      
                       //禁止并关闭socket
                       socket.Shutdown(System.Net.Sockets.SocketShutdown.Both);
     
                       socket.Close();
                  }
                  catch(System.Exception ex)
                  {
                       label1.Text=ex.Message.ToString();
                  }
             }
     
         }
    }
     
     
    接收端
    ================================
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
     
    namespace CSClientTest
    {
         ///<summary>
         /// receive 的摘要说明。
         ///</summary>
         public class receive : System.Windows.Forms.Form
         {
             private System.Windows.Forms.Button button1;
             private System.Windows.Forms.TextBox textBox1;
             ///<summary>
             ///必需的设计器变量。
             ///</summary>
             private System.ComponentModel.Container components = null;
     
             //定义一个全局的socket以便监听和接收数据
             System.Net.Sockets.Socket socket = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,System.Net.Sockets.SocketType.Stream,System.Net.Sockets.ProtocolType.Tcp);
     
             public receive()
             {
                  //
                  // 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.button1 = new System.Windows.Forms.Button();
                  this.textBox1 = new System.Windows.Forms.TextBox();
                  this.SuspendLayout();
                  //
                  // button1
                  //
                  this.button1.Location = new System.Drawing.Point(448, 184);
                  this.button1.Name = "button1";
                  this.button1.TabIndex = 0;
                  this.button1.Text = "接受";
                  this.button1.Click += new System.EventHandler(this.button1_Click);
                  //
                  // textBox1
                  //
                  this.textBox1.Location = new System.Drawing.Point(224, 184);
                  this.textBox1.Name = "textBox1";
                  this.textBox1.Size = new System.Drawing.Size(208, 21);
                  this.textBox1.TabIndex = 1;
                  this.textBox1.Text = "";
                  //
                  // receive
                  //
                  this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
                  this.ClientSize = new System.Drawing.Size(664, 266);
                  this.Controls.Add(this.textBox1);
                  this.Controls.Add(this.button1);
                  this.Name = "receive";
                  this.Text = "receive";
                  this.Load += new System.EventHandler(this.receive_Load);
                  this.ResumeLayout(false);
     
             }
             #endregion
     
             private void receive_Load(object sender, System.EventArgs e)
             {
                  //定义本地接收端IP和端口
                  System.Net.IPEndPoint ep = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"),1022);
                 
                  //socket绑定本地接收端
                  socket.Bind(ep);
     
                  //监听,监听挂起10
                  socket.Listen(10);
             }
     
             private void button1_Click(object sender, System.EventArgs e)
             {
                  try
                  {
                       if(socket.Blocking)
                       {
                           //为新建连接创建新的 Socket
                           System.Net.Sockets.Socket socket1=socket.Accept();
     
                           //定义一个字节数组
                           byte[] b = new byte[1024];
                 
                           //将接收到的字节数组存入b中
                           socket1.Receive(b);
     
                           //将B中的数据转换为字符串后显示到textbox
                           textBox1.Text = System.Text.Encoding.UTF8.GetString(b);
     
                           //禁止并关闭这个新的socket连接
                           socket1.Shutdown(System.Net.Sockets.SocketShutdown.Both);
                           socket1.Close();
                       }
                  }
                  catch
                  {
                       textBox1.Text = "无数据";
                  }
             }
     
            
         }
    }
     
  • 相关阅读:
    数据转换16进制字符
    大数库GMP测试
    OpenSSL测试大数
    二开Jacoco + codediff 实现增量覆盖率报告
    goc 代码覆盖率
    epoll详解 NK
    深入浅出PID算法
    ubuntu18.04安装谷歌拼音输入法(Google Pinyin)
    Python PyQt5中弹出子窗口解决子窗口一闪而过的问题
    python 笔记14 多窗口传递数据
  • 原文地址:https://www.cnblogs.com/ZetaChow/p/2237425.html
Copyright © 2020-2023  润新知