2016-10-22 59 views
0

我正在嘗試創建一個小程序,它接受連接並將所收到的所有內容轉儲到文件中。通過這種方式,我可以將東西傳遞給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 
+0

您*正在*確定它。但是你沒有*得到它。 'netcat'沒有關閉連接,所以你從不會從'read()'得到-1。問題不在這裏,而在於你如何使用'netcat'。 – EJP

+0

那麼,啓發我如何正確使用netcat – Yamakaja

+0

那麼,啓發你我們,你已經如何使用'netcat',我們可能有一個地方可以從頭開始。 – EJP

回答

-1

我無法找到一個方法,但猜測當輸入結束,因此我只寫了我自己的客戶端,終止NUL的輸入(我只處理文本)