【问题标题】:Java Socket... how it works?Java Socket ...它是如何工作的?
【发布时间】:2013-10-23 23:03:58
【问题描述】:

我有一个关于 Java 套接字的问题。

我正在尝试使用 net 包类在 java 中构建基本的服务器-客户端连接。所以首先,我使用了 Socket 类并使用

创建了一个附加到客户端的套接字

地址= InetAddress.getByName(ip); socket = new Socket(地址, 端口);

ip: 只是 ip 地址的字符串表示,port 是我指定连接套接字的端口号。

现在我的问题是,当我使用 getLocalPort() 方法时,我得到的端口号与我指定的端口号不同。此外,当我在命令提示符下使用命令“netstat”时,我找不到端口号在活动连接列表中连接套接字的位置。

谁能解释这是为什么?

【问题讨论】:

  • @MadProgrammer 这完全不正确。接受的套接字使用与ServerSocket. 相同的端口号它似乎也与问题没有任何关系。
  • @EJP 服务端socket和客户端共享同一个本地端口,不过我同意,可能是跑话题,不睡觉有这个习惯...
  • @MadProgrammer 不,服务器套接字和 accepted 套接字共享同一个本地端口,客户端的套接字将此作为其远程端口。这些都与您所说的或现在所说的没有任何相似之处。
  • @EJP 谢谢你的澄清,是的,接受套接字,我的错:P

标签: java port serversocket


【解决方案1】:

port 是我指定的将套接字附加到的端口号

不,不是。它是 连接 套接字的远程端口号。您的问题中的一个问题是您使用的术语不正确,因此让自己感到困惑。

当我使用 getLocalPort() 方法时,我得到的端口号与我指定的端口号不同。

不,你没有。您在创建Socket. 时指定了远程端口,getLocalPort() 返回本地端口。他们不是一回事。还有一种方法可以指定本地端口号,但您不需要它。该过程称为“绑定”。 “绑定”和“连接”都不是“附加”。

另外,当我在命令提示符下使用命令“netstat”时,我在活动连接列表中找不到套接字连接到的端口号。

你应该。您应该会在远程列中看到带有远程 IP:port 的行,并且状态为 ESTABLISHED。

【讨论】:

  • 谢谢大家...现在更有意义了
【解决方案2】:

那是因为您在new Socket(address , port ); 中指定的端口号是remote 端口号。例如,如果您的远程服务器在您想要连接的端口 8123 上打开了一个套接字,您可以输入 new Socket(address , 8123);

您在getLocalPort()netstat 中看到的端口号是为您的本地计算机套接字自动生成的端口号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2015-06-09
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多