在 TCP 多线程服务器中,如果客户端获得服务,如何找到服务套接字的端口号?
来自 Sun Java 教程
当请求并成功建立连接时,该
accept()
方法返回一个新的“Socket
对象”,该对象绑定到相同的本地端口,并将其远程地址和远程端口设置为客户端的远程地址和远程端口。服务器可以通过这个新的与客户端进行通信,Socket
并继续在原始上侦听客户端的连接请求ServerSocket
。
如何找到“Socket
对象”的端口号?
在 TCP 多线程服务器中,如果客户端获得服务,如何找到服务套接字的端口号?
来自 Sun Java 教程
当请求并成功建立连接时,该
accept()
方法返回一个新的“Socket
对象”,该对象绑定到相同的本地端口,并将其远程地址和远程端口设置为客户端的远程地址和远程端口。服务器可以通过这个新的与客户端进行通信,Socket
并继续在原始上侦听客户端的连接请求ServerSocket
。
如何找到“Socket
对象”的端口号?
Socket.getPort()
不做你想做的事?或者你的意思是你想要本地端口(同样,有Socket.getLocalPort()
?如果你能给出一个你所追求的工作示例,它会更容易理解。
这是一个简短的示例:
import java.net.*;
public class Test {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(50000);
while (true) {
Socket s = ss.accept();
System.out.println("Local: " + s.getLocalPort() +
"; Remote: " + s.getPort());
}
}
}
如果您运行该代码并多次连接到它,您将获得如下输出:
Local: 50000; Remote: 17859
Local: 50000; Remote: 17866
Local: 50000; Remote: 17872
所以getLocalPort()
返回构造函数中指定的端口ServerSocket
,但getPort()
每次返回不同的端口。