(这可能已被问了一千次,但我不能直截了当。)
假设我有以下代码段:
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}},端口可以共享,因此不应该是一个问题。
它是如何运作的?
答案 0 :(得分:1)
您可以仅通过使连接套接字使用相同的地址和端口来建立连接。 (忽略使用多宿主服务器)
单个连接是源地址+端口和目标地址+端口的唯一组合,因此如果您有不同的源,则可以拥有相同的目标。
答案 1 :(得分:1)
换句话说,您是否可以编写包含连接到自身的客户端的服务器程序?肯定是答案是肯定的。所有集成测试都会运行进程内服务器并连接到它。