在服務器端的區別,我們用Java Socket技術和ServerSocket的使用端口
Socket server = serverSocket.accept();
創建套接字。創建套接字後,我們可以創建一個新線程來處理該套接字的輸入/輸出流。因此,如果有更多的連接請求進入,我們可以回到偵聽同一端口並創建新套接字。由於我們已經在特定端口創建了ServerSocket,當然我們無法再在該端口再創建一個ServerSocket。
所以從我的理解,我可以得出結論:在服務器端,我們可以在一個端口下創建多個套接字? (類似於什麼Web服務器)
其實我的問題是,在客戶端,當我們創建一個套接字時,我們可以指定我們想要使用的本地端口。在本地端口成功創建客戶端套接字後,我們是否可以將該端口用於其他客戶端套接字?該端口是否會永久綁定到套接字,直到套接字關閉(或端口關閉)?由於客戶端沒有「Listening」概念,我們是否可以像ServerSocket一樣執行相同的操作(請參閱ServerSocket可以在一個端口下創建多個套接字)?
我非常困惑客戶端如何處理端口和套接字,因爲我正在比較ServerSocket和客戶端套接字。
請指點我正確的方向,我知道我的想法有點不對。非常感謝。
嗨,我想我幾乎可以得到它。我剛剛意識到要形成我們需要的獨特(local_address,LOCAL_PORT,REMOTE_ADDRESS,REMOTE_PORT)對有效的套接字。假設我在端口400創建了一個客戶端套接字,並連接到IP 123.在此連接終止之前,我在同一個端口創建了另一個客戶端套接字400,並將其連接到IP 456.將創建第二個客戶端套接字被接受? – GMsoF
對於TCP/IP,沒有。一次只能有一個應用程序在單個端口上偵聽。現在,如果您有兩塊網卡,則可以讓一個應用程序使用相同的端口號偵聽第一個IP和第二個IP上的第二個IP。一個有效的示例可能會有兩個客戶端在ip 123.0.0.1上通過端口4000和4001同時連接到端口80上的服務器ip 123.0.0.2。兩者都連接到服務器上的80,但客戶端端口的區別在於區分連接。 對於UDP(多點傳送),多個應用程序可以訂閱相同的端口,但是那是一個不同的故事 – sunrize920
你不能「創建在[即其他客戶端套接字綁定到]相同的端口「。理論上,RFC允許它,如果它要連接到不同的目標,但在實踐中的bind()之前連接(),所以內核不會允許它。 – EJP