我有一个使用while循环连续读取Socket的线程,就像这样
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0){ ..... }
当它收到某些东西(例如设备心跳)时,它在同一个套接字上回复“ON”。
现在我想从Thread2发送一个字符串,并希望在Thread2中读取相同的套接字。
但是当我发送一个字符串时,它总是从Thread1读取它的响应。
请给我一个解决方案。
'经典'的方法是让一个'read'线程只从套接字读取,另一个'protocol'线程在生产者 - 消费者'输入'队列上等待请求,处理所有协议并可以写入套接字根据请求/协议的要求。这将包括你的'心跳'回复。
请求类型可以是包含'rx'和'tx'字节缓冲区的结构,一个标识请求类型的枚举,(例如'EdataRx','EsendAPU'),也许是任何希望同步交换的线程的信号量当设备完全处理交换时,设备上的数据等待协议线程发出信号。
请求结构类型应该有其他有用的东西,例如。用于传回错误号/消息的int或字符串。
什么都行不通的是尝试从多个线程读取或写入套接字。只是不要尝试。