-1

在 TCP 多线程服务器中,如果客户端获得服务,如何找到服务套接字的端口号?

来自 Sun Java 教程

当请求并成功建立连接时,该accept()方法返回一个新的“Socket对象”,该对象绑定到相同的本地端口,并将其远程地址和远程端口设置为客户端的远程地址和远程端口。服务器可以通过这个新的与客户端进行通信,Socket并继续在原始上侦听客户端的连接请求ServerSocket

如何找到“Socket对象”的端口号?

4

1 回答 1

1

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()每次返回不同的端口。

于 2010-07-02T06:27:10.907 回答