具有交叉通信要求的 C# TCP 服务器和客户端

标签 c# tcp

我需要一些关于编程逻辑的反馈。

我正在使用 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/

相关文章:

c# - 如何按文件名顺序合并文件

c# - 动态关键字或直接转换为类型?

c# - 在不知道字节数的情况下读取特殊流

c# - 如何将简单日期从文本框转换为mysql中的日期时间?

java - 简单的 Netty Echo 服务器/客户端不接收消息

tcp - 在 RUDP、UDT、LWIP、DCCP 中广播

python - 如何知道python中tcp connect的状态?

c# - 无法在解决方案中构建某些项目?

java - 如何通过 tcp/ip 将文件从 C 发送到 Java 并从 Java 接收相同的文件到 C,而不会丢失数据和其他错误?

c# - 很难解释 TcpClient 中的延迟