2011-05-23 152 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()方法。