用于对等通信的 Java“对等”套接字

use*_*054 0 java sockets p2p network-programming

在 Java 中,您可以使用SocketServerSocket获取用于两个进程之间通信的双向通道。但是只有其中一个必须具有 ServerSocket 并被视为“服务器”,而另一个被视为“客户端”,即必须首先可用的服务器。那么,有没有办法让两个对等点使用相同的代码?我的意思是,在客户端-服务器应用程序中,服务器必须等待客户端:

ServerSocket serverSocket = new ServerSocket(port);
Socket client = serverSocket.accept();
Run Code Online (Sandbox Code Playgroud)

而客户端必须连接到服务器:

Socket socket = new Socket(host, port);
Run Code Online (Sandbox Code Playgroud)

如果没有活动服务器,客户端代码就会失败。

我的问题是是否有办法让两个对等点都使用客户端代码来等待另一个主机出现,这样哪个对等点先到达并不重要。

Mal*_*alt 6

在对等应用程序中,每个对等点既是客户端又是服务器。多线程通常用于使对等方能够侦听传入连接以及与其他对等方建立新连接。因此,所有对等点的代码都是相同的。