Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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

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#_Sockets_Tcp - Fatal编程技术网

C# 保持插座打开一次&;多次发送/接收消息

C# 保持插座打开一次&;多次发送/接收消息,c#,sockets,tcp,C#,Sockets,Tcp,问题 我有一个C#应用程序,它从套接字客户端接收流,在检索流之后,我需要接受客户端发送的另一个流 当前代码 int length= this.DataSocket.Receive(this.buffer, this.buffer.Length, SocketFlags.None); // saves the first file ..... length= this.DataSocket.Receive(this.buffer, this.buffer.Length, Soc

问题

我有一个C#应用程序,它从套接字客户端接收
,在检索流之后,我需要接受客户端发送的另一个

当前代码

   int length= this.DataSocket.Receive(this.buffer, this.buffer.Length, SocketFlags.None);

 // saves the first file ..... 

   length= this.DataSocket.Receive(this.buffer, this.buffer.Length, SocketFlags.None);
详细信息

我确定我正在从套接字客户端写入数据,但在第一个文件接收到第二个
DataSocket之后。接收挂起,并且没有收到
流。。有什么想法吗

隔离的网络流没有消息的自动隔离-它只是字节。因此,需要手动拆分;最方便的写入方法是在记录之间使用已知的分隔符。阅读最方便的方法是在每条消息前面加上在下一条消息中读取的字节数

您需要使用这些信息来阅读整个消息,否则阅读会变得疯狂。在这种情况下,我怀疑您在第一次接收时完全读取了这两条消息,而现在没有更多的数据-因此阻塞(它必须阻塞,直到至少一个字节可以读取,或者关闭为止)


另外,请注意,因为你阅读并不意味着你有一个完整的消息-只有至少一个字节。您通常需要循环以获取消息。

您是否在分隔消息?使用长度前缀?是的,实际上我需要这样做!