我目前正在编写一个BitTorrent客户端,根据我的理解,我可以使用一个本地端口连接到不同的对等端并独立地与它们通信。
如果我要编写服务器,即我必须接受连接,那么我知道我可以使用Java ServerSocket来侦听相同的端口并独立处理连接。但是,我想要做的是发起连接,而不是等待它们被启动(因为有没有服务器),我想使用相同的本地这些端口(所以我可以连接说几百个对等端共享同一个端口)。我怎样才能正确地做到这一点?
答案 0 :(得分:0)
我认为在您的场景中,您需要与其他自己在某个端口上侦听的对等点建立连接。所以为了做到这一点,您需要为所有需要连接的对等体提供URL和端口,然后创建专用于每个同行。
此外,服务器套接字基本上用于接受特定端口的所有传入连接。因此,所有同行都会在其末端使用服务器套接字侦听特定端口的请求。同样,您还可以使用服务器套接字侦听在特定端口上对应用程序的所有传入请求。
答案 1 :(得分:0)
使用套接字连接,即使在点对点通信的情况下,您也需要具有“启动器”(通常称为客户端)和“接受者”(称为服务器)。也就是说,您仍然可以将客户端和服务器视为此特定连接的不同对等方的角色。
当您充当客户端时,您确实可以重用本地端口(使用此构造函数:https://docs.docker.com/windows/step_one/)。只要没有其他具有相同4个属性的套接字(即,您将无法建立与<的第二个连接),将创建一个套接字(由远程地址+远程端口+本地地址+本地端口标识)。 strong>相同对等/服务器,但您可以使用相同的本地端口与其他对等方建立连接。)
我无法想到这样做的实际好处(而不是让系统为您分配一个随机的本地端口)。然后,可能有一些我没想到的事情:)