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

本文关键字:消息 amp 一次 插座 | 更新日期: 2023-09-27 18:00:31

问题

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

当前代码

   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.Receive后挂起,并且没有接收到stream。。知道吗?

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

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

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

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