【发布时间】:2017-12-19 12:08:55
【问题描述】:
我有一个线程使用 while 循环连续读取套接字,像这样
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0){ ..... }
当它接收到某些东西(例如设备心跳)时,它会在同一个套接字上回复“ON”。
现在我想从 Thread2 发送一个字符串,并想在 Thread2 中读取相同的套接字。
但是当我发送一个字符串时,它总是从 Thread1 读取它的响应。
请给我一个解决方案。
【问题讨论】:
-
如果您有一个线程在一个紧密的循环中从套接字读取所有内容,您如何期望 另一个 线程有机会读取?为什么你希望 both 线程仍然使用同一个套接字?如何知道设备的响应是针对 Thread1 还是 Thread2?
-
也许你应该改变你的设计,让一个线程从套接字读取并通知任何其他感兴趣的线程。或者解释一下你真正想要做什么
-
为什么首先需要线程?
-
好的,让我解释一下我想要做什么。其实我想读一个跟踪设备。设备启动与服务器的连接,连接成功后,每隔一分钟它就会不断发送它的热量,我们需要向设备发送“ON”。现在我想编写一个 API 来读取设备的其他参数,如位置。当我向设备发送一个字符串以读取其位置时,我需要将位置作为 API 的响应返回,这就是为什么我希望在 Thread2 中做出响应。现在请指导我最好的方法。
-
假设这是 TCP,请记住 TCP 抽象是双向的无穷无尽的字节流。如果您希望能够发送和接收离散的 消息,则由 您 在 TCP 上实现它(或转移到已经实现消息传递的更高级别的协议)。不能保证在一端对
Write的每次调用都会与另一端对Read的调用进行 1-1 匹配。
标签: c# multithreading sockets