Java套接字 - 本地端口

A.B*_*.B. 8 java sockets

我正在学习使用Java的套接字编程.我使用以下声明连接到网站:

s = new Socket("www.nba.com", 80);
Run Code Online (Sandbox Code Playgroud)

当我调试应用程序并查看s的内容时,我看到:

Socket[addr=www.nba.com/2.21.246.97,port=80,localport=7846]
Run Code Online (Sandbox Code Playgroud)

1)我想知道这个本地端口7846的来源以及它究竟是什么.

2)如果网站的IP地址是2.21.246.97,为什么我只能在浏览器的地址栏中输入2.21.246.97才能连接到网站?


谢谢

Shy*_*hyJ 6

它是本地套接字端口号.它通常由系统分配.

什么是插座?.

在客户端:客户端知道运行服务器的计算机的主机名以及服务器正在侦听的端口号.要发出连接请求,客户端会尝试与服务器的计算机和端口上的服务器会合.客户端还需要向服务器标识自己,以便绑定到在此连接期间将使用的本地端口号.这通常由系统分配.

至于第二个问题:

我假设这个IP地址是您查找时由DNS服务器获得的www.nba.com(我的不同).问题可能是此地址的HTTP服务器为多个虚拟主机提供服务和/或它关心Host浏览器发送的标头.在您的情况下,它是IP地址而不是www.nba.com.

  • @HasanTahsin是的。您应该使用[此构造函数](http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#Socket(java.net.InetAddress,%20int,%20java.net。 InetAddress,%20int))。 (2认同)