2011-05-23 38 views
0

我在C#創建這個小客戶端套接字:從插座接收,直到在C#中特定行

TcpClient socket = new TcpClient(this.ip, this.port); 
NetworkStream stream = socket.GetStream(); 
StreamReader input = new StreamReader(stream); 
StreamWriter output = new StreamWriter(stream); 

output.WriteLine(request); 
output.Flush(); 

String result = ""; 
String line = ""; 
while (line != "GO") 
{ 
    line = input.ReadLine().Trim(); 
    result += line + "\n"; 
} 

socket.Close(); 
return result; 

它連接得很好,但它保持停留在while循環,它只會收到第一線服務器套接字發送,所以從不接收「GO」。我在這裏做錯了什麼?

+0

你可以提供關於服務器端代碼的更多細節嗎?另外,另外,'input.ReadLine()。Trim()'在這裏很危險,因爲如果流被耗盡,'ReadLine()'返回'null'。如果服務器在不發送「GO」行的情況下關閉連接,則客戶端應用程序將會死亡。 – 2011-05-23 18:08:24

+0

你確定沒有收到「GO」嗎?如果您發送帶有其他數據而沒有換行符的「GO」,那麼在ReadLine()調用期間您將讀取的不僅僅是「GO」,並且「行」不等於「GO」,這可以解釋爲什麼您不能退出循環。 – alexD 2011-05-23 18:10:14

回答

1

這可能是因爲它正在等待數據,這將掛起您的應用程序。

您可能需要改用TcpListener,並在接收數據時調用AcceptTcpClient()

此外,我總是在線程或BackgroundWorker中調用此函數,以便界面不會掛起。

如果您需要TcpListerner停止監聽TCP連接,那麼您可以調用實例的Stop()方法。