我正在嘗試創建一個小程序,它接受連接並將所收到的所有內容轉儲到文件中。通過這種方式,我可以將東西傳遞給netcat,將netdin收到的所有東西發送到我的ServerSocket。下面是我做的:如何確定netcat的輸入結束?
一旦插座已經打開我讓自己的InputStream這樣的:
Socket socket = serverSocket.accept();
InputStream inputStream = new BufferedInputStream(socket.getInputStream());
現在,我想讀一切事情,從輸入,寫回一個網址,並關閉連接。但是,我如何確定腳本何時完成? 問duckduckgo導致的結果是這樣的:
byte[] buffer = new byte[1024];
int count;
while((count = inputStream.read(buffer) > 0) {
outputStream.write(buffer,0,count);
}
處理文件時,此工作完全正常,但在我的情況下,read將被阻塞的netcat一次不接收任何更多的投入,我有終止的netcat這實際上允許代碼繼續,但我不能再發送任何東西,因爲套接字已關閉。
我做進一步測試和轉儲緩衝器的內容(此時只有一個8字節緩衝器;我是管道的計數(上升)到netcat的),其導致該(hexdumps):
Bytes read: 2 Last byte: 0A
31 0A 00 00 00 00 00 00
Bytes read: 2 Last byte: 0A
32 0A 00 00 00 00 00 00
Bytes read: 2 Last byte: 0A
33 0A 00 00 00 00 00 00
。 ...
Bytes read: 3 Last byte: 0A
31 30 0A 00 00 00 00 00
一旦倒計時結束,它又被卡在read()處了。 在處理延遲輸入時,使用InputStream#available()
似乎也不可靠。
編輯: 我使用netcat
這樣的:
countup.sh | nc localhost 9999
countup.sh:
for i in {1..10}
do
sleep 1
echo $i
done
您*正在*確定它。但是你沒有*得到它。 'netcat'沒有關閉連接,所以你從不會從'read()'得到-1。問題不在這裏,而在於你如何使用'netcat'。 – EJP
那麼,啓發我如何正確使用netcat – Yamakaja
那麼,啓發你我們,你已經如何使用'netcat',我們可能有一個地方可以從頭開始。 – EJP