2011-06-24 60 views
1

问题保持套接字打开一次和发送/接收消息多次

我有从套接字客户端收到stream C#应用程序,检索流之后,我需要接受另一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); 

详细

IM确保从插座客户端,但第一个文件后即时将数据写入接收第二DataSocket.Receive没有stream在收到..任何想法?

+0

你是在分隔消息吗?使用长度前缀? –

+0

是的,其实我需要这样做! – Sudantha

回答

3

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

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

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

+0

තැන්ක්ස්感谢使用手动分隔符解决问题 – Sudantha

相关问题