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

时间:2014-04-30 11:10:14

标签: 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 
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.

现在我可以使用相同的地址和端口来接受传入连接和连接到地址吗?如果可以,那怎么样?如果没有,那么为什么不呢?根据{{​​3}},端口可以共享,因此不应该是一个问题。

它是如何运作的?

2 个答案:

答案 0 :(得分:1)

您可以通过使连接套接字使用相同的地址和端口来建立连接。 (忽略使用多宿主服务器)

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

答案 1 :(得分:1)

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