阅读&从两个线程写单个套接字

时间:2017-12-19 12:08:55

标签: c# multithreading sockets

我使用while循环连续使用Thread读取Socket,就像这样

while ((i = stream.Read(bytes, 0, bytes.Length)) != 0){ ..... }

当它收到某些内容(例如设备心跳)时,它会在同一个套接字上回复“ON”。

现在我想从Thread2发送一个字符串,并希望在Thread2中读取相同的套接字。

但是当我发送一个字符串时,它总是从Thread1读取它的响应。

请给我一个解决方案。

1 个答案:

答案 0 :(得分:1)

经典'方法是一个人阅读'仅从套接字读取的线程和另一个协议'等待生产者 - 消费者输入的线程'请求队列,处理所有协议,并可根据请求/协议的要求写入套接字。这将包括你的心跳'回复。

请求类型可以是包含' rx'和' tx'字节缓冲区,一个标识请求类型的枚举(例如,#Ed; EdataRx' EsendAPU'),也许是一个信号量,任何希望与设备同步交换数据的线程都在等待协议线程在完全处理交换时发出信号。

请求结构类型应该有其他有用的东西,例如。用于传回错误号/消息的int或字符串。

根本不能正常工作的是尝试从多个线程读取或写入套接字。只是不要尝试。