我对Java套接字有疑问。
我正在尝试使用net package类在java中构建基本的服务器 - 客户端连接。所以首先,我使用了Socket类,并使用
创建了一个附加到客户端的套接字address = InetAddress.getByName(ip); socket = new Socket(address,port);
ip:只是ip地址的字符串表示,port是我指定连接套接字的端口号。
现在我的问题是,当我使用方法getLocalPort()时,我得到的端口号与我指定的端口号不同。另外,当我在命令提示符下使用命令'netstat'时,我找不到端口号套接字连接到活动连接列表中的位置。
任何人都能解释为什么会这样吗?
答案 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。