Socket
Netstat 顯示在不同埠上執行的程序,然後它們應該
我有一些我正在測試的程式碼。程序 A 偵聽程序 B 連接到的預定義套接字和我的測試我正在執行程序 A 和 B 的 32 個實例。我編寫了我的腳本來告訴程序 A 偵聽埠 9001-9032 並放入程序 B 的每個實例的配置文件以及要連接的相應埠。
當我執行啟動程序 A 和 B 的腳本並執行時,
netstat -tnap
我發現在所有埠 9001-9032 中,實際使用的唯一埠是另一個程序使用的 9001(我的錯誤!)。當我 grep 程序 A 時,我發現每個實例都在偵聽看似完全隨機的埠,這些埠與它們應該偵聽的埠 90** 無關。然而,我的程序 B,它應該連接到埠 9001-9032,能夠找到並連接到程序 A 的每個實例,儘管 A 顯然沒有監聽它 B 應該嘗試連接的埠。我對這怎麼可能感到困惑。如果這還不夠令人困惑,我的 32 程序並且只有32 個程序(在 9032 上偵聽)在啟動時死亡,並在嘗試綁定到埠時地址被拒絕的錯誤。我嘗試更改程序以偵聽埠 15001-15032 只是為了看看會發生什麼,但我仍然得到完全相同的行為;所有程序似乎都在偵聽隨機埠,並且 32 程序無法建立連接。
誰能解釋為什麼我的埠的行為方式是這樣的?我是否誤解了 netstat 或 Linux 埠的某些部分?
socat
我建議使用(建立任意字節流的命令行工具)模擬據稱斷開的連接。嘗試監聽埠
socat - TCP-Listen:9001
對於偵聽埠 9001 的 tcp 連接或
socat - UDP-Listen:9001
用於 udp 連接。
檢查是否
netstat -p
(或替代地sockstat
)顯示已socat
建立的連接。如果是這樣,您應該進一步調查您的程式碼,並可能在stackoverflow.com上發布與原始碼相關的問題。在其他情況下,請告訴我們!