C#TcpClient,同时读写流

时间:2015-10-16 22:52:07

标签: c# input tcp stream buffer

我知道这个问题已经在SO上多次被问过,但是没有一个线程解决了我们目前面临的完全相同的问题。

我们基本上是在使用TCP服务器/客户端应用程序,其中服务器是用Java编写的,客户端是用C#编写的。 我在Java端,我正在使用分离输出流为我的缓冲区。

我们的问题是,如果客户端从服务器接收消息并从缓冲区中异步读取这些消息并尝试在该过程中写入一些内容,则会抛出异常 - 这并不奇怪。

我的问题是:这种情况下的方法是什么?创建分离的流?我们已经尝试过,但似乎C#不希望我们这样做。我们迫切需要一个解决方案,非常感谢任何帮助!

1 个答案:

答案 0 :(得分:13)

不,它应该有效。你需要的是TcpClient,你可能已经拥有了。从TcpClient.GetStream()开始,返回NetworkStream。然后,读取和写入操作可以同时/同时发生,而无需同步。因此读写可以同时进行。

必须同步的是多个并发读取。所有并发读取必须由lock(objReads)同步。

同样,多个并发写入必须由lock(objWrites)同步。

MSDN says,保证。

请注意,我明确表示,读取和写入具有不同的锁定。