在Java中使用相同的地址和端口接受和连接

在Java中使用相同的地址和端口接受和连接,java,sockets,Java,Sockets,(这个问题可能被问了一千遍,但我没有弄清楚。) 假设我有以下代码段: InetAddress localAddress = InetAddress.getByName("192.168.1.10"); int localPort = 65000; InetAddress targetAddress = InetAddress.getByName("192.168.1.20"); int targetPort = 65000; // Create a new serversocket Serv

(这个问题可能被问了一千遍,但我没有弄清楚。)

假设我有以下代码段:

InetAddress localAddress = InetAddress.getByName("192.168.1.10");
int localPort = 65000;
InetAddress targetAddress = InetAddress.getByName("192.168.1.20");
int targetPort = 65000;

// Create a new serversocket 
ServerSocket ss = new ServerSocket(localPort, 50, localAddress);
// Wait for an incoming connection...
Socket acceptedSocket = ss.accept();
// Do something with the accepted socket. Possibly in a new thread.

Set up new connection...
Socket socket = new Socket(targetAddress, targetPort, localAddress, localPort);
// Write something to the socket.
现在,我可以使用相同的地址和端口来接受传入连接和连接到地址吗?如果可以的话,怎么办?如果没有,为什么不呢?据介绍,端口可以共享,所以这应该不是问题

它是如何工作的?

只有让连接套接字使用相同的地址和端口,才能建立连接。(忽略多主机服务器的使用)


单个连接是源地址+端口和目标地址+端口的唯一组合,因此如果您有不同的源,则可以具有相同的目标

换句话说,您可以编写包含连接到自身的客户端的服务器程序吗?答案是肯定的。所有集成测试都是通过运行进程内服务器并连接到它来完成的