C# TcpClient,同时读写流
C# TcpClient, read and write stream simultaneously
我知道这个问题已经在 SO 上被问过好几次了,但是没有一个线程解决了我们目前面临的完全相同的问题。
我们基本上是在开发 TCP Server/Client 应用程序,其中服务器是用 Java 编写的,客户端是用 C# 编写的。
我站在 Java 一边,我正在为我的缓冲区使用分离的输入和输出流。
我们的问题是,如果客户端从服务器接收消息并从缓冲区异步读取这些消息并尝试在该过程中向其中写入内容,则会引发异常 - 不足为奇。
我的问题是:在这种情况下该怎么做?创建单独的流?我们已经尝试过了,但似乎 C# 不希望我们这样做。我们在这里迫切需要解决方案,非常感谢您的帮助!
不,应该可以。您需要的是 TcpClient
,您可能已经拥有了。从那里 TcpClient.GetStream()
,返回 NetworkStream
。然后不需要同步就可以进行读写操作concurrently/simultaneously。所以读和写可以同时发生。
需要同步的是多个并发读取。所有并发读取必须由 lock(objReads)
.
同步
同样,多个并发写入必须由 lock(objWrites)
同步。
MSDN says,保证有。
请注意,我说得很清楚了,读和写有不同的锁。
我知道这个问题已经在 SO 上被问过好几次了,但是没有一个线程解决了我们目前面临的完全相同的问题。
我们基本上是在开发 TCP Server/Client 应用程序,其中服务器是用 Java 编写的,客户端是用 C# 编写的。 我站在 Java 一边,我正在为我的缓冲区使用分离的输入和输出流。
我们的问题是,如果客户端从服务器接收消息并从缓冲区异步读取这些消息并尝试在该过程中向其中写入内容,则会引发异常 - 不足为奇。
我的问题是:在这种情况下该怎么做?创建单独的流?我们已经尝试过了,但似乎 C# 不希望我们这样做。我们在这里迫切需要解决方案,非常感谢您的帮助!
不,应该可以。您需要的是 TcpClient
,您可能已经拥有了。从那里 TcpClient.GetStream()
,返回 NetworkStream
。然后不需要同步就可以进行读写操作concurrently/simultaneously。所以读和写可以同时发生。
需要同步的是多个并发读取。所有并发读取必须由 lock(objReads)
.
同样,多个并发写入必须由 lock(objWrites)
同步。
MSDN says,保证有。
请注意,我说得很清楚了,读和写有不同的锁。