Java Socket ......它是如何工作的?

时间:2013-10-23 23:03:59

标签: java port serversocket

我对Java套接字有疑问。

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

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

address = InetAddress.getByName(ip); socket = new Socket(address,port);

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

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

任何人都能解释为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

  

port是我指定用于将套接字附加到

的端口号

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

  

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

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

  

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

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