.NET网络通信基础(1)

    技术2022-05-20  37

     1.了解Socket

     

      Socket自提出以来一直就是网络应用程序最重要且应用最为广泛的技术  通过Socket概念进行网络联机,可以避免处理切割数据封包、分段传输与数据重组等繁复的细节。   2. 命名空间 System.Net.Sockets命名空间主要包括Sockets络通信应用程序的相关类 Socket TCPClient TCPListener UDPClient

     

    NetworkStream

     

     

     

    3. Socket类的方法成员

    Bind方法

     

    } Accept方法 } Connect方法 } Send方法和SendTo方法 }

     

    SocketException

     

     

     

    Close方法和Shutdown方法
    Receive方法和ReceiveFrom方法
        4.服务器端的代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; namespace TcpServer {     public partial class Server : Form     {         delegate void ControlChangeHandler(string msg1,string msg2);         int port;         TcpListener myTcpListener;         NetworkStream myNetworkStream;         private void StartListen()         {             port = Convert.ToInt32(this.txtPort.Text.Trim());             myTcpListener = new TcpListener(port);             try             {                 myTcpListener.Start();                 string msg = "等待联机中........";                 this.Invoke(new ControlChangeHandler(onChange), new object[] { msg,""});                 Socket mySocket = myTcpListener.AcceptSocket();                 while (true)                 {                     if (mySocket.Connected)                     {                         msg = "通信端口" + txtPort.Text + "联机成功";                         this.Invoke(new ControlChangeHandler(onChange), new object[] { msg, "" });                         myNetworkStream = new NetworkStream(mySocket);                         string Message;                         byte[] data = new byte[1024];                         myNetworkStream.Read(data, 0, data.Length);                         Message = Encoding.ASCII.GetString(data);                         this.Invoke(new ControlChangeHandler(onChange), new object[] { "", Message  });                     }                 }             }             catch (SocketException ex)             {                 MessageBox.Show(ex.Message);             }         }         private void Send()         {             string Message = this.txtMsg.Text;             byte[] data = Encoding.ASCII.GetBytes(Message);             myNetworkStream.Write(data,0,data.Length );         }         private void onChange(string msg1, string msg2)         {             if (msg1 != "")             {                 this.txtConnection.Text += msg1 + "/r/n";             }             if (msg2 != "")             {                 this.txtMsg.Text += msg2 + "/r/n";             }         }         public Server()         {             InitializeComponent();         }         private void btnListen_Click(object sender, EventArgs e)         {             Thread th = new Thread(new ThreadStart(this.StartListen ));             th.IsBackground = true;             th.Start();         }         private void btnSend_Click(object sender, EventArgs e)         {             this.Send();         }     } }   5.客户端的代码  using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; namespace TCPClient {     public partial class Client : Form     {         delegate void ControlChangeHandler(string msg);         private TcpClient myTcpClient = new TcpClient();         private NetworkStream myNetworkStream;         private void Connect()         {             try             {                 string HostName = this.txtServer.Text;                 int port = Convert.ToInt32(txtPort.Text);                 myTcpClient.Connect(IPAddress.Parse(HostName), port);                 myNetworkStream = myTcpClient.GetStream();                 string msg = "主机:" + HostName + ",通信端口:" + txtPort.Text + "连接成功";                 this.txtConnection.Text = msg;                 Thread th = new Thread(new ThreadStart(Read));                 th.IsBackground = true;                 th.Start();             }             catch (Exception e)             {                 MessageBox.Show(e.Message );             }         }         private void Send()         {             string Msg = this.txtMsg.Text;             byte[] data = Encoding.ASCII.GetBytes(Msg);             myNetworkStream.Write(data,0,data.Length );         }         private void Read()         {             while (true)             {                 if (myTcpClient.Connected)                 {                     int DataSize = myTcpClient.ReceiveBufferSize;                     byte[] data = new byte[DataSize];                     myNetworkStream.Read(data, 0, DataSize);                     string Msg = Encoding.ASCII.GetString(data, 0, data.Length);                     this.Invoke(new ControlChangeHandler(onChange), new object[] { Msg });                 }             }         }         private void onChange(string msg)         {             this.txtMsg.Text = msg+"/r/n";         }         public Client()         {             InitializeComponent();         }         private void btnConnect_Click(object sender, EventArgs e)         {             this.Connect();         }         private void btnSend_Click(object sender, EventArgs e)         {             this.Send();         }     } }

    最新回复(0)