我想無限地讀取到達特定 TCP 連接埠的資料並將資料轉儲到檔案中。我嘗試過許多不同的變體,nc
但它對我來說並不奏效。在大多數情況下,我在控制台上沒有收到任何錯誤。以下是我嘗試過的:
nc -lv 12345 >> ../myfile
nc -v 12345 >> ../myfile
nc -v -p 12345 >> ../myfile
nc -v localhost -p 12345 >> ../myfile
感謝你的幫助..
答案1
我想無限期地讀取到達特定 TCP 連接埠的數據
這實際上沒有意義...如果您希望所有資料都到達 UDP 端口,那麼很好 - 然而 TCP 是基於連接的協定。一旦客戶端連接,並且您accept()
,您最終會得到兩個套接字 - 一個正在偵聽,另一個連接到客戶端...nc
將關閉原始偵聽套接字,並與客戶端進行一對一處理。
如果您希望能夠偵聽多個客戶端連接,請嘗試使用socat
:
socat TCP-LISTEN:12345,fork FD:1 >> ../myfile
這將設定一個偵聽套接字並在連接上分叉新進程 - 保持偵聽套接字偵聽。所有接收到的資料都會寫入 stdout(檔案描述子1
),並重定向到該 stdout../myfile
以進行追加。
筆記:資料將從任意數量的客戶端接收,沒有保證的順序,沒有框架...即:如果您一次有多個客戶端,這將是一團混亂的資料。
如果您想socat
為您處理該文件,那麼您可以使用CREATE
或之一OPEN
(請參閱手冊頁):
socat TCP-LISTEN:12345,fork OPEN:../myfile,append
如果您對“一次一位客戶" 方法,然後放入nc
一個循環:
while :; do nc -l 12345; done >> ../myfile
測試一下nc
:
nc localhost 12345
答案2
左邊的螢幕
nc -l 1234
啟動伺服器。
右側螢幕 nc 127.0.0.1 1234
已連線。
看起來你的命令有誤。
還值得知道的是您使用的是 gnu 版本還是 bsd 版本,我的是 bsd 版本。 man nc 顯示「NC(1) BSD 通用指令手冊」。要在 gnu 上啟動伺服器,可能需要 -l 和 -p。要將客戶端連接到伺服器的任何端口,永遠不會使用 -p。
您也可以使用 -v
您面臨的直接問題是您根本無法運行它。
你的問題詢問它是不確定的,但我要注意的是,如果你在客戶端執行 ctrl-c ,那麼除了斷開連接之外,它還會停止伺服器。您可以將該伺服器置於循環監聽狀態。這樣可行。因此,如果您在客戶端按下 ctrl-c 後嘗試再次連接,伺服器將繼續偵聽並且仍然存在。