Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从插座接收,直到C中的特定行#_C#_Sockets - Fatal编程技术网

C# 从插座接收,直到C中的特定行#

C# 从插座接收,直到C中的特定行#,c#,sockets,C#,Sockets,我在C#中创建了这个小客户端套接字: 它连接得很好,但它仍然停留在while循环中,它只会接收服务器套接字发送的第一行,因此永远不会接收到“GO”。我在这里做错了什么吗?这可能是因为它正在等待数据,这将挂起您的应用程序 您可能需要使用TcpListener,并在接收数据时调用AcceptTcpClient() 此外,我总是在线程或BackgroundWorker中调用它,这样接口就不会挂起 如果您需要TcpListerner停止侦听TCP连接,那么您可以调用实例的stop()方法。您可以提供有关

我在C#中创建了这个小客户端套接字:


它连接得很好,但它仍然停留在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;