Я пытаюсь создать небольшую программу, которая принимает соединения и просто сбрасывает все, что она получает в файл. Таким образом, я могу просто передать вещи в 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
Вы * * определяете его. Но вы не * получаете * это. 'netcat' не закрывает соединение, поэтому вы никогда не получите -1 из' read() '. Проблема здесь не в том, как вы используете 'netcat'. – EJP
Ну, просветите меня о том, как правильно использовать netcat – Yamakaja
Ну, просветите нас, как вы, как вы уже используете 'netcat', и нам, возможно, с чего начать. – EJP