Java 可以并行运行同一个套接字的多个实例吗?
Posted
技术标签:
【中文标题】Java 可以并行运行同一个套接字的多个实例吗?【英文标题】:Can Java run multiple instances of the same socket in parallel? 【发布时间】:2022-01-21 06:09:21 【问题描述】:我正在通过带有 Future Boolean 的 Callable 循环多个套接字连接,以并行打开多个 IP 的套接字。如果每个 IP 不同,它似乎工作正常。但是,当需要向同一个 IP 发送数据时,一个套接字会多次打开到同一个 IP,这会导致 Spring 崩溃,但会在几秒钟后立即重启。
Java (Spring) 能否使用同一个套接字在同一个 IP 上运行多个实例?数据发送正常,任何一方都没有错误,除了主 Spring 线程在连接期间崩溃并重新启动(但这不会像我提到的那样影响连接)。
【问题讨论】:
【参考方案1】:一个套接字拥有一个 TCP 连接。
一个TCP连接由标识。给定一些通过线路到达的字节,这组 4 个数字是 TCP 实现决定字节属于哪个“对话”的方式。没有其他办法。
结果是,如果您希望您的客户端程序有多个 TCP 连接到同一个目标,您需要有多个套接字,并且您需要不同的源端口(通常是这种情况,只是不在创建套接字时指定源端口)。
这是基本的 TCP 和套接字的东西,不是 Java 特定的。
【讨论】:
我已经物理端口转发,并在服务器机器中打开了相关的单端口。如果我在创建套接字时没有在客户端中指定源端口,我认为连接将在服务器端被阻止,因为端口未打开。大约 10 个连接试图与单个 IP 建立,那么手动打开服务器机器上的 10 个端口,然后在客户端为每个连接分配一个新端口是否可行?还是一次将连接限制为 1 个更好?感谢您的帮助。 在 TCP 中根本不可能有多个具有相同以上是关于Java 可以并行运行同一个套接字的多个实例吗?的主要内容,如果未能解决你的问题,请参考以下文章