2012-11-21 56 views
8

我正在学习使用Java的套接字编程。 我用这个语句连接到一个网站:当我调试应用程序,并期待在S的含量Java Socket - 本地端口

s = new Socket("www.nba.com", 80); 

,我看到:

Socket[addr=www.nba.com/2.21.246.97,port=80,localport=7846] 

1)我想知道这将localPort 7846来自和它究竟是什么。

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


感谢

+1

我相信它是连接到主机的机器端口。 –

回答

6

这是一个本地套接字端口号。它通常由系统分配。

参见What is a Socket?

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

至于第二个问题:

我认为这个IP地址是当你查找www.nba.com您通过您的DNS服务器会得到什么(我的是不同的)。问题可能在于此地址处的HTTP服务器为多个虚拟主机提供服务,并且/或者它关心浏览器发送的头文件。在你的情况下,它是IP地址而不是www.nba.com

+0

我可以自己分配本地端口吗? –

+1

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

+1

@HasanTahsin看看:['套接字(字符串主机,int端口,InetAddress localAddr,int本地端口)'](http://docs.oracle.com/javase/6/docs/api/java/net/Socket .html#Socket(java.lang.String,%20int,%20java.net.InetAddress,%20int)) –