我需要一些关于编程逻辑的反馈。
我正在使用 C# 开发 TCP 服务器,它也将充当 TCP 客户端。基本上,客户端设备 (A) 联系我的 TCP 服务器并发送信息。基于此,TCP 服务器可能(或可能不会)通过 TCP 与另一台服务器 (Z) 通信,向其发送一些数据,并且有时会收到响应并将其传回设备 A。到目前为止很好,这很好用。但是,有时 Z 会创建一个到我的 C# TCP 服务器的新连接,并想向设备 A 发送一些数据。
这就是我正在努力解决的问题。我可以从 Z 获取数据,读取它并在读取的文本中查看目标 IP 地址。但是我如何将它发送到设备 A,它仍然通过它自己的线程上的 TCPListener 连接?
我可以使用静态变量和“锁定”机制让线程查找要发送到设备的内容,但是如果我也添加设备 B 和 C 会怎样?
我基本上需要一些方法,根据在新连接上从 Z 发送的数据,确定应该在哪个线程上将数据发送到设备的 TCPListener。
它正在影响我的头脑,因此您可能拥有的任何链接或粗略的逻辑(不必是代码)都会有很大帮助。
是的,我已经在 Google 上搜索了一段时间,但我找到的所有示例都比我需要做的要简单。
提前致谢!
最佳答案
你可以保留一个Dictionary<IPAddress,TCPClient>
为此目的,并将消息发送到目标 IP。确保您通过在接受新连接时删除以前的连接或使用 Dictionary<IPAddress,List<TCPClient>>
来优雅地处理来自单个 IP 的多个客户端。
关于具有交叉通信要求的 C# TCP 服务器和客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5113354/