C# — WinForm TCP連接之客戶端


TCP連接之客戶端,涉及到如下三個函數,分別是:

/*****************************
  ** 函數功能:
     用於與服務端進行TCP連接
  ** 輸入參數: 
      IP:IP地址
        Port:端口號        
  ** 輸出參數:
 ******************************/
 private void ClientConnect(string IP, string Port){}

 

/******************************
 ** 函數功能:
    用於向服務端發送信息
 ** 輸入參數: 
     MsgType:TCP協議中的協議頭部
 ** 輸出參數:
 ******************************/
 private void ClientSendMsg(ushort MsgType){}

 

/******************************
  ** 函數功能:
     接受服務端發回的信息
  ** 輸入參數: 
  ** 輸出參數:
 ******************************/
  private void RecMsg(){}

三者的關系圖如下:

 

具體代碼如下:

1、ClientConnect()

View Code
/******************************
  ** 作者: ***
 ** 變更時間: 2012-12-02
 ******************************/
 #region 連接服務端方法
 private void ClientConnect(string IP, string Port)
 {
     //定義一個套字節監聽  包含3個參數(IP4尋址協議,流式連接,TCP協議)
     socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

     //需要獲取文本框中的IP地址
    IPAddress ipaddress = IPAddress.Parse(IP);
     //將獲取的ip地址和端口號綁定到網絡節點endpoint上
   IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(Port));

     //這里客戶端套接字連接到網絡節點(服務端)用的方法是Connect 而不是Bind
     socketClient.Connect(endpoint);

     //創建一個線程 用於監聽服務端發來的消息
    threadClient = new Thread(RecMsg);

     //將窗體線程設置為與后台同步
    threadClient.IsBackground = true;

     //啟動線程
    threadClient.Start();
 }
 #endregion

 

2、ClientSendMsg()

View Code
/******************************
  ** 作者: ***
 ** 變更時間: 2012-12-02
 ******************************/
 #region 發送節目全屏byte串信息到服務端的方法
 private void ClientSendMsg(ushort MsgType)
 {
      //調用客戶端套接字發送字節數組
     socketClient.Send(addHeadBody);
 }
 #endregion

 

3、RecMsg()

View Code
/******************************
  ** 作者: 郭樂彬
  ** 變更時間: 2012-11-30
 ******************************/
 #region 接收服務端發來信息的方法
 private void RecMsg()
 {
     while (true) //持續監聽服務端發來的消息
    {
         //定義一個1024*200的內存緩沖區 用於臨時性存儲接收到的信息
       byte[] arrRecMsg = new byte[1024 * 200];

         //將客戶端套接字接收到的數據存入內存緩沖區, 並獲取其長度
       int length = socketClient.Receive(arrRecMsg);

        byte[] tem = new byte[24];
        Array.Copy(arrRecMsg, 0, tem, 0, 24);

        ByteToObject bytetoobject = new ByteToObject();
        //MsgHead為一個自定義的結構體
        MsgHead msghead = (MsgHead)bytetoobject.BytesToStuct(tem, typeof(MsgHead));
  
        switch (msghead.MsgType)
        {
              //根據自定義的TCP協議中規定的頭部來決定后面的操作
       }
     }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM