繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM