java - 在没有服务器的情况下建立平等客户端的双向 TCP 通信的最佳方法是什么?

标签 java multithreading sockets networking tcp

我想创建一个三向沟通系统,其中各方都有平等的权利,与合作伙伴有两个沟通 channel 。
该程序是分散的,每台机器都运行相同的代码,其中有一个包含三个 IP 地址的列表,每个 IP 地址代表一台机器。对于每台计算机,合作伙伴的 IP 地址是通过查看其自己的 IP 地址并使用列表中的其他两个来确定的。

现在没有预先确定机器打开的顺序,除了设置类似的内容之外,还有什么方法可以控制 TCP 通信
'如果您要通话的 IP 地址高于您自己的 IP 地址,请连接到服务器,否则您就是服务器并接受套接字'?

最后,我想要一个 TCPread(port) ,每次来自任何 IP 的消息进入时都会触发,并且 TCPwrite(port, ip, message) 发送消息一条消息。

我的想法是一个 TCPhandler,它存储我计划在程序中使用的每个端口的所有套接字,每个端口一个线程。然后每次执行读取或写入时,它都会检查处理程序中是否有用于端口和 IP 地址的套接字,如果没有,它会向 IP 发送一个套接字并等待响应...我不认为我已经但完全理解整个 TCP 的事情。

最佳答案

如果您不关心连接数量,您可以执行以下操作:

  • 每个对等点打开端口并监听传入连接
  • 尝试在一段时间内与每个对等点建立连接

因此,您将在每个对等点之间获得两个连接。现在您可以通过以下方式使用它们:

  • 传出连接用于发送消息
  • 传入连接用于接收消息

关于java - 在没有服务器的情况下建立平等客户端的双向 TCP 通信的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37689889/

相关文章:

Linux 用户空间 L2 控制协议(protocol)

java - JFreeChart 在实际值之外添加趋势线?

java - Cassandra 启动错误,ThreadPriorityPolicy=42

c++ - std::thread - 逐行读取文件

c - c语言在多线程应用中clock()是如何计时的?

c++ - 如何使用 boost::asio 实现嵌套协议(protocol)?

java - 使用 Blobstore API 将文件上传到谷歌云存储

java - Android 无法打开现有的 SQLite 数据库文件

java - 使用 Java 拆分 URL 格式的字符串

带有 Socks5 代理的 Java SSLSocket