C# 向正在等待TCP的线程发送指令?

C# 向正在等待TCP的线程发送指令?,c#,multithreading,.net-4.0,tcp,C#,Multithreading,.net 4.0,Tcp,我试图理解TCP中的多线程,所以我编写了一个基本的telnet文本“router” 使用ReadLine()每个使用TCP侦听器的线程将等待来自telnet客户端的输入,然后根据发送的文本进行响应。我使用多线程和多个telnet客户机来实现这一点 我想有条件地向所有线程发送消息。 例如,如果从任何一个线程发送的文本是“Alert!”,那么我希望连接的客户端的每个线程都执行WriteLine(“Alert!”) 这有意义吗? 我的问题是,我不知道如何让一个线程在另一个线程中引发事件。您需要查看事件

我试图理解TCP中的多线程,所以我编写了一个基本的telnet文本“router”

使用
ReadLine()
每个使用TCP侦听器的线程将等待来自telnet客户端的输入,然后根据发送的文本进行响应。我使用多线程和多个telnet客户机来实现这一点

我想有条件地向所有线程发送消息。 例如,如果从任何一个线程发送的文本是“Alert!”,那么我希望连接的客户端的每个线程都执行
WriteLine(“Alert!”)

这有意义吗?
我的问题是,我不知道如何让一个线程在另一个线程中引发事件。

您需要查看事件代理模式。基本上,您将拥有一个对象,其中包含所有线程都订阅的事件。它还将具有一个可以调用的方法,该方法将调用事件。这听起来可能很复杂,但相当简单


示例代码在这里。

不要将线程视为数据。将它们视为构造

显然,要让A类在B类中引发事件,B必须引用A并订阅其事件

但老实说,我认为你做得不对。有一个TCP侦听器。当消息传入时,您将获得一个web请求对象,并且可以在其自己的线程中进行处理。在处理线程时,如果发现单词“Alert”,则向更高级别的类生成一个事件。然后处理事件并做任何需要做的事情。架构示例:

Manager实例化TcpHandler并订阅其AlertReceived事件。 TcpHandler实例化MessageProcessor并订阅其MessageReceived事件

当TcpHandler从其TcpListener对象读取某些内容时,触发MessageProcessor类并让它读取另一个线程上的实际数据

触发MessageReceived事件。然后在TcpHandler类中,处理事件。如果收到的数据为“警报”,则触发AlertReceived事件


Manager类将捕获事件并执行您所需的任何其他操作。

如果您正在运行telnet会话,则需要保持连接打开,并且与每个客户端的对话必须在其自己的线程中完成。n个客户端的数量等于n个线程的数量,每个线程都有自己的侦听器等待客户端的输入。是的,这是一个很好的开始,谢谢!现在是为每个线程执行writeline的下一个问题…在订阅事件的eventhandler中应该很容易做到。有指针吗?问题是telnet会话基本上都是在
readline
上进行的。。。如何从eventhandler在同一套接字中执行
writeline
?我想我可能需要创建静态套接字?很好。。。一种方法是在可以中断的while循环中进行ReadLine()调用,有点像while(noEvents)而不是while(true)。这样,当你触发一个事件时,你可以设置noEvents=false,这将中断你的循环,这样你就可以调用WriteLine,然后你可以将noEvents设置回true并返回你的循环。好的,这样我就不能中断
ReadLine()。。。。。我解决这个问题的方法是将
StreamWriter
暴露给另一个线程,不管
StreamReader
被卡住,该线程都可以编写它想要的所有内容