簡體   English   中英

java serverSocket和客戶端套接字如何在同一台PC中交互?

[英]How java serverSocket and client socket interacts within the same pc?

按照此鏈接中的示例: http : //www.javatpoint.com/socket-programming

據我了解,端口號: 6666是用於說明套接字編程的虛構或原始端口。 我想知道PC在運行myClient.javamyServer.java之后如何知道它的服務器具有端口6666。

我也想知道在進行Real socket編程時, myServer.java需要放置在真實服務器位置,如果不是,則在哪里? 只想了解在哪里初始化serverSocket類對象! 在服務器端還是在客戶端?

另外,操作系統或PC(通常)如何搜索可用端口?

但是,您的鏈接文檔已損壞,讓我稍微解釋一下網絡套接字的工作方式。

一台計算機具有多個網絡接口。 如果您正在運行窗口,則可以使用ifconfig在linux / osx上運行ipconfig /all來檢查它們。 您會看到您有一個IP地址為127.0.0.1的回送接口。 另外,為方便起見,決定在此回送接口中添加一個“名稱”,並將其命名為localhost 您可以在/etc/hosts文件中驗證這一點,該文件中存在127.0.0.1與localhost之間的映射。

也就是說,計算機可以使用系統內核在自己身上找到到本地主機的路由。 此環回接口是虛擬的,在操作系統中實現,因此不會有任何數據包通過您的以太網接口或wifi卡。

TCP和UDP是IP之上用於發送數據的協議。 TCP通過三向握手建立連接,服務器確認包接收。 UDP是面向非連接的,因此客戶端會將數據包發送到端口,並且不會發送確認。 那只是一個巨大的總結。

當您想偵聽端口時,您的應用程序需要將其實際告知操作系統,並且當操作系統的網絡組件接收到一些TCP.dst值等於6666的數據包時(在您的情況下),它將發送有效負載到您的應用程序。 操作系統負責確認數據包和所有對您透明的底層通信。

您可能會猜到,操作系統只能將同一端口端口綁定到單個應用程序。 這就是為什么如果您兩次啟動Web服務器,第二次執行將失敗。

您可以在Linux機器上使用netstat -l查看正在偵聽哪些端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM