2012-11-21 85 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)) –