2016-10-22 9 views
0

Я пытаюсь создать небольшую программу, которая принимает соединения и просто сбрасывает все, что она получает в файл. Таким образом, я могу просто передать вещи в netcat, который отправляет все, что он получает на stdin, на мой ServerSocket. Вот что я сделал:Как определить конец ввода из netcat?

После того, как сокет был открыт я получить себе в InputStream, как это:

Socket socket = serverSocket.accept(); 
InputStream inputStream = new BufferedInputStream(socket.getInputStream()); 

Теперь я пытаюсь прочитать все от этого входа, записать обратно в URL и закрыть подключение. Но как определить, когда скрипт закончил? Просить DuckDuckGo приводят к результатам, как это:

byte[] buffer = new byte[1024]; 
int count; 
while((count = inputStream.read(buffer) > 0) { 
    outputStream.write(buffer,0,count); 
} 

Это отлично работает при работе с файлами, но в моем случае чтение будет блокировать один раз Netcat не получает больше входного сигнала, и я должен прекратить Netcat, который на самом деле позволяет код для продолжения, но я больше ничего не могу отправить, потому что сокет закрыт.

я сделал дальнейшие тесты и сбрасывал содержимое буфера (на этот раз только буфер 8 байт; я был обжигающе счетчик (вверх) в Netcat), в результате этого (шестнадцатеричных представлений бинарных файлов):

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() также не кажется надежным при работе с задержкой ввода.

Edit: Я использую netcat так:

countup.sh | nc localhost 9999 

countup.sh:

for i in {1..10} 
do 
    sleep 1 
    echo $i 
done 
+0

Вы * * определяете его. Но вы не * получаете * это. 'netcat' не закрывает соединение, поэтому вы никогда не получите -1 из' read() '. Проблема здесь не в том, как вы используете 'netcat'. – EJP

+0

Ну, просветите меня о том, как правильно использовать netcat – Yamakaja

+0

Ну, просветите нас, как вы, как вы уже используете 'netcat', и нам, возможно, с чего начать. – EJP

ответ

-1

Я не мог найти способ, но угадать, когда входные концы так Я просто написал свой собственный клиент, который завершает ввод с помощью NUL (я только обрабатываю текст)

 Смежные вопросы

  • Нет связанных вопросов^_^