程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 閒來無事,寫個基於TCP協議的Socket通訊Demo

閒來無事,寫個基於TCP協議的Socket通訊Demo

編輯:C#入門知識

  .Net Socket通訊可以使用Socket類,也可以使用 TcpClient、 TcpListener 和 UdpClient類。我這裡使用的是Socket類,Tcp協議。

  程序很簡單,一個命令行的服務端,一個命令行的客戶端。服務端啟動後根據輸入的端口號綁定本機端口並啟動偵聽,客戶端啟動後根據輸入的客戶端數量、服務IP、服務端口號連接服務端。客戶端連接成功後啟動新線程隨機發送消息到服務端並等待接收服務端返回的消息,服務端和客戶端成功創建連接後啟動新線程接收客戶端消息並返回客戶端一個消息,如此循環下去……

  上圖:

 

  

服務端關鍵代碼

  啟動偵聽:

  endPoint =  IPEndPoint(  socket =   socket.Listen(.MaxValue);

  啟動新線程接收客戶端連接:

 
  socketThread =  Thread(OnSocketAccept) {IsBackground =   Show();

  接收客戶端連接細節:

  
   
  
    OnSocketAccept(      
           socket = obj           (              
                  Socket clientSocket =                  
                  (!                                         
                      
                                                ClientDict[key] =                      
                     
                    
                                                                     }

 

  發送/接收數據:

  
   
  
    OnSendOrReceive(      
           socket = obj            (              
                   
                  receiveLength =                  
                  sendLength =                                                                                                     }

  關閉連接:

  
   
  
  
          socket.Disconnect(    }

 

客戶端關鍵代碼

  連接服務端:

 ( i = ; i <= clientNum; i++ 
 
 
 
 
  ConnetServer(IPAddress address,  port,  clientSocket = 

  發送/接收數據、關閉連接代碼同服務端一樣。

  優先使用線程池線程,服務端接受客戶端連接使用獨立線程(socketThread)是考慮到可能需要手工停止該線程。

  使用 Monitor.TryEnter(ClientDictLock, LockTimeOut) 和 Monitor.Exit(ClientDictLock); 是考慮到 lock 可能形成死鎖,使用lock需要注意。

  本人才疏學淺,歡迎大家批評指正!

 

源代碼下載

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved