2016-06-08 51 views
1

我有使用Java服務器 - 客戶端程序,我試圖創建一個端口和客戶端Socket不同端口ServerSocket,他們不能相互連接。客戶端拋出ConnectException。當我將客戶端上的套接字更改爲與我用於ServerSocket的套接字相同時,它們就工作了。客戶端和服務器是否需要使用相同的端口進行連接?

正如我從這個線程Java Networking: Explain InputStream and OutputStream in Socket aswer瞭解,如果一臺機器創建一個帶有端口的套接字,然後該套接字綁定到該機器,那麼爲什麼客戶端和服務器需要使用相同的端口來相互連接?

此外,兩個應用程序的機器上不能使用同一端口等什麼發生當具有相同的端口和一臺機器兩個差值服務器需要通過2個不同的應用程序連接到他們兩個?

回答

3

您需要對TCP通信有一些基本的瞭解。只是谷歌TCP教程。

簡而言之,服務器將偵聽特定的端口。當一個服務器正在監聽一個端口時,它就會被綁定。一臺機器上只有一臺服務器(或進程)可以監聽某個端口。

客戶端將連接到一臺機器和指定端口上進行通信。如果服務器正在監聽客戶端詢問的端口,則會發生通信。否則,連接無法繼續。

使服務器被綁定到(或偵聽)端口必須爲端口指定的客戶端一樣。

-1

答案是否定的,服務器將偵聽特定端口上,但在客戶端啓動連接到服務器 例如:服務器正在偵聽端口80 當客戶端連接到服務器時,它會連接到服務器IP地址的端口80。 客戶端插座是否有另一個端口,它是由OS

+1

客戶端套接字使用與偵聽套接字相同的本地端口。 – EJP

0

客戶端和服務器分配並不需要使用相同的端口。正如您所指出的,一個端口只能分配給一臺機器上的一個進程。爲了更加正確,端口和IP地址對是分配單元。因此,如果您的計算機有兩個或更多地址,則可以將端口綁定到每個IP的不同進程。

標準設置是服務器進程來偵聽端口上的連接,說10000使用的服務器套接字。客戶端進程嘗試使用客戶端套接字連接到該端口。它將使用OS分配的端口。一旦建立連接,服務器將分配另一個客戶端套接字,以管理與客戶端進程的通信,並且這也將具有OS分配的端口。

+0

它將具有與偵聽套接字相同的分配端口。 – EJP

相關問題