0

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

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

地址= InetAddress.getByName(ip); 套接字 = 新套接字(地址,端口);

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

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

谁能解释这是为什么?

4

2 回答 2

1

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

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

于 2013-10-23T23:09:05.890 回答
1

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

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

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

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

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

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

于 2013-10-23T23:56:58.093 回答