2013-10-23 20 views
0

我對Java套接字有個疑問。Java Socket ...它是如何工作的?

我想在java中使用net包類建立一個基本的服務器 - 客戶端連接。所以首先,我使用Socket類,並創建了一個套接字連接到將使用的客戶端

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

ip:只是ip地址的字符串表示,端口是我指定用來附加套接字的端口號。

現在我的問題是,當我使用getLocalPort()方法時,我得到的端口號與我指定的不同。另外,當我在命令提示符下使用命令「netstat」時,在活動連接列表中套接字連接的編號。

任何人都可以解釋這是爲什麼?

+0

@MadProgrammer這是完全不正確的。接受的套接字使用與「ServerSocket」相同的端口號。它似乎也沒有任何關係。 – EJP

+0

@EJP服務器套接字和客戶端共享相同的本地端口,但我同意,它可能運行的主題,沒有睡眠有這個習慣... – MadProgrammer

+0

@MadProgrammer不,服務器套接字和*接受*套接字共享相同的本地端口,客戶端的套接字將其作爲遠程端口。這些都與你所說的或現在所說的沒有任何相似之處。 – EJP

回答

1

端口是我指定的插座連接到

不,它不是一個端口號。它是遠程端口號爲連接的套接字。你的問題中的一個問題是,你錯誤地使用了術語,因此迷惑了你自己。

當我使用方法getLocalPort()我得到一個不同於我指定的端口號。

不,你沒有。您在創建Socket.時指定了遠程端口getLocalPort()返回本地端口。他們不是一回事。有一種方法可以指定一個本地端口號碼,但你不需要它。該過程稱爲「綁定」。 '綁定'和'連接'都不是'連接'。

此外,當我在命令提示符下使用命令「netstat」時,我沒有在活動連接列表中找到套接字所連接的端口號。

您應該。您應該在遠程列中看到一個包含遠程IP:端口的行,並且狀態爲ESTABLISHED。

+0

感謝所有......現在它變得更有意義 – ssayyed

1

這是因爲您在new Socket(address , port);中指定的端口號是遠程端口號。例如,如果您的遠程服務器在您想連接的端口8123上打開了一個套接字,則應該輸入new Socket(address , 8123);

您在getLocalPort()netstat中看到的端口號是爲本地機器插座自動生成的端口號。

相關問題