如何启动 2 Java 套接字侦听同一端口?

How can I initiate 2 Java Sockets that listen on the same port?

我目前正在编写一个 BitTorrent 客户端,据我所知,我可以使用单个本地端口连接到不同的对等点并独立地与它们通信。

如果我要编写服务器,即我必须接受连接,那么我知道我可以使用 Java ServerSocket 来侦听同一端口并独立处理连接。然而,我想做的是 启动 连接而不是等待它们被启动(因为有 no 服务器),我想为这些使用相同的本地端口(这样我就可以连接到数百个共享相同端口的对等点)。我怎样才能正确地做到这一点?

我认为在您的场景中,您需要与其他自己正在监听 port.So 的对等点建立连接,为了做到这一点,您需要 URL 并为您需要的所有对等点提供端口连接然后创建专用于每个对等点的套接字。

此外,服务器套接字基本上用于接受特定端口的所有传入连接。因此,您的所有对等方都将在其 end.Similarly 处使用服务器套接字在特定端口侦听请求,您还可以使用服务器套接字在特定端口侦听对应用程序的所有传入请求。

用socket连接,需要有一个"initiator"(通常称为Client)和"acceptor"(称为Server),即使是点对点的情况通讯。也就是说,您仍然可以将客户端和服务器视为此特定连接的不同对等方的角色。

当你作为客户端时,你确实可以重用本地端口(使用这个构造函数:http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#Socket(java.net.InetAddress,%20int,%20java.net.InetAddress,%20int))。只要不存在具有相同 4 个属性的其他套接字(即,您将无法与 相同 peer/server,但您可以与具有相同本地端口的其他对等点建立连接。

虽然我想不出这样做有什么实际好处(而不是让系统为您分配一个随机的本地端口)。话又说回来,可能有些事情我没有想到:)