我正在尝试创建一个小程序,它接受连接并将所收到的所有内容转储到文件中。通过这种方式,我可以将东西传递给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