2016-05-23 122 views
-2

假設我在計算機A中,我有幾臺運行在不同端口上的服務器,但都基本上是同一個程序的一個實例(只是綁定到不同的端口)。現在,計算機B,一個客戶端,是否需要知道他希望在計算機A上連接的軟件是什麼端口?計算機如何知道數據包的端口?

問題是,我正在實施一些類似於套接字的通信。一切都應該正常工作,但我不知道如何創建從計算機到另一個初始消息 - 我只是不知道要發送到什麼端口。客戶端是否知道他要發送到服務器上的端口?

說這裏(客戶端):clientsocket.connect(('localhost', 8089)),客戶端連接運行在端口8089上的服務器嗎?如果是這樣,他的套接字端口是什麼(他使用什麼端口爲客戶端?)

回答

0

是的。計算機A上的網絡堆棧知道傳遞傳入數據包的進程的唯一方法是爲計算機B設置數據包中的正確端口默認情況下,Web服務器在端口80上運行,但運行多個不同Web服務器的計算機將在不同的端口上運行它們,並且客戶端必須明確指定要連接到的服務器的端口號http://example.com,http://example.com:8080http://example.com:12345將參考端口80,8080 example.com運行的服務器,和12345,分別。

爲了瞭解您的客戶端使用的端口,你需要閱讀您要在服務器的文檔連接到。

從另一個方向來看,客戶端用於接收響應的端口通常由網絡堆棧自動設置。客戶端不需要做任何特殊的設置,服務器只需將數據包發回到在傳入數據包的源部分中找到的地址/端口。

+0

謝謝,但在什麼樣的計算機上插座將在計算機乙?比如說,我嗅探數據包,發現目標端口是80(我正在聯繫一個web服務器),但是如果有的話,哪一行代碼確定了源端口。 – Jonathan

+0

如果你有數據包(並且我假設它是一個TCP套接字),它是數據包頭的源端口字段,它是目標端口之前的2字節字段。 – chepner

相關問題