【问题标题】:Why is the Socket provided by ServerSocket using a different port?为什么ServerSocket提供的Socket使用不同的端口?
【发布时间】:2017-04-10 09:46:02
【问题描述】:

服务器:

int port = 7000
ServerSocket ss;
..
System.out.println("Listening on " + ss.getInetAddress() + ":"
   + ss.getLocalPort());

Socket s = ss.accept();
..
System.out.println("Accepted connection " + s.getInetAddress() + ":"
   + s.getPort());

客户:

Socket s;
..
System.out.println("Connected to " + s.getInetAddress() + ":"
   + s.getPort());

服务器开始监听:

Listening on 0.0.0.0/0.0.0.0:7000

客户端连接:

Connected to localhost/127.0.0.1:7000

但是服务器说套接字连接在不同的端口上?

Accepted connection /127.0.0.1:54682

参考:

Java the difference of Socket and ServerSocket in using port

.. ServerSocket.accept() 接受连接,并将端点包装在 一个套接字。端点与端点具有相同的本地端口号 ServerSocket,根据 RFC 793 的定义,因此 包装Socket。

.. 每个客户端连接都会获得一个单独的 Socket 进行通信, 所有通信都使用相同的服务器端 TCP 端口。

【问题讨论】:

    标签: java sockets tcp


    【解决方案1】:

    getPort() 返回套接字的远程端口(即另一端地址),而getLocalPort() 返回套接字绑定的本地端口。

    如果你在服务器接受的套接字上运行s.getLocalPort());,你也会得到7000

    【讨论】:

    • 确认:接收端的getPort()是客户端传出的临时端口?
    • @Zhro :我宁愿说在服务器端。一般来说getPort()总是返回远程端口,即服务器的客户端计算机端口和客户端的服务器监听端口。
    • @Zhro 我宁愿只说它返回远程端口,根本不考虑客户端和服务器。连接完成后,只有本地端和对等点。
    猜你喜欢
    • 1970-01-01
    • 2013-07-17
    • 2011-12-28
    • 2014-08-04
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    相关资源
    最近更新 更多