2013-03-14 53 views
0
  tcpListener = new TcpListener(IPAddress.Any, 6007); 
      tcpListener.Start(); 
      while (true) 
      { 
       TcpClient client = tcpListener.AcceptTcpClient(); 
       sw = new StreamWriter(client.GetStream()); 
       sr = new StreamReader(client.GetStream()); 
       while(true) 
        parseRequest(sr.ReadLine()); 
      } 

這實質上是我用於C#tcp服務器的代碼。服務器需要處理多個連接,但不能同時處理,因此它可以與一個客戶端一起工作,並且當客戶端斷開連接時繼續到下一個客戶端。客戶端可以發送可變數量的消息,並且服務器需要處理這些消息。如何正確移動到C#tcp服務器中的下一個客戶端?

問題是,當第一個客戶端斷開連接時,它永遠不會連接到下一個客戶端。我嘗試在第二個while循環中添加代碼來檢查「if(!Client.Connected)break」;但即使在我的客戶端應用程序關閉後,Connected仍然返回true。我能做些什麼才能在第一個斷開連接後連接到第二個客戶端?

回答

0

您需要爲每個接受的套接字啓動一個新線程或註冊一個新的偵聽器,而不是在接受新客戶端的同一個循環中完全處理它。接受循環不應該做其他事情。