从两个线程读取和写入单个套接字

问题描述 投票:0回答:1

我有一个使用while循环连续读取Socket的线程,就像这样

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

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

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

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

请给我一个解决方案。

c# multithreading sockets
1个回答
1
投票

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

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

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

什么都行不通的是尝试从多个线程读取或写入套接字。只是不要尝试。

© www.soinside.com 2019 - 2024. All rights reserved.