[英]Using same address and port for accepting and connecting in Java
(这可能已被问了一千次,但我不能直截了当。)
假设我有以下代码段:
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.
现在我可以使用相同的地址和端口来接受传入连接和连接到地址吗? 如果可以,那怎么样? 如果没有,那么为什么不呢? 根据这篇文章 ,端口可以共享,所以它应该不是问题。
它是如何工作的?
您只能通过使连接套接字使用相同的地址和端口来建立连接。 (忽略使用多宿主服务器)
单个连接是源地址+端口和目标地址+端口的唯一组合,因此如果您有不同的源,则可以拥有相同的目标。
换句话说,您可以编写包含连接到自身的客户端的服务器程序吗? 肯定是答案是肯定的。 所有集成测试都会运行进程内服务器并连接到它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.