C# 从插座接收,直到C中的特定行#
我在C#中创建了这个小客户端套接字:C# 从插座接收,直到C中的特定行#,c#,sockets,C#,Sockets,我在C#中创建了这个小客户端套接字: 它连接得很好,但它仍然停留在while循环中,它只会接收服务器套接字发送的第一行,因此永远不会接收到“GO”。我在这里做错了什么吗?这可能是因为它正在等待数据,这将挂起您的应用程序 您可能需要使用TcpListener,并在接收数据时调用AcceptTcpClient() 此外,我总是在线程或BackgroundWorker中调用它,这样接口就不会挂起 如果您需要TcpListerner停止侦听TCP连接,那么您可以调用实例的stop()方法。您可以提供有关
它连接得很好,但它仍然停留在while循环中,它只会接收服务器套接字发送的第一行,因此永远不会接收到“GO”。我在这里做错了什么吗?这可能是因为它正在等待数据,这将挂起您的应用程序 您可能需要使用
TcpListener
,并在接收数据时调用AcceptTcpClient()
此外,我总是在线程或BackgroundWorker中调用它,这样接口就不会挂起
如果您需要TcpListerner停止侦听TCP连接,那么您可以调用实例的
stop()
方法。您可以提供有关服务器端代码的更多详细信息吗?另外,顺便提一下,input.ReadLine().Trim()
在这里是危险的,因为ReadLine()
在流耗尽时返回null
。如果服务器关闭连接而不发送GO
行,您的客户端应用程序将死亡。您确定没有收到“GO”吗?如果在发送“GO”时,其他数据前面没有换行符,那么在ReadLine()调用期间,您将读取的不仅仅是“GO”,而“line”将不等于“GO”,这将解释为什么不退出循环。
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;