Java 如何确定netcat输入的结束?
我正在尝试创建一个小程序,它接受连接并将接收到的所有内容转储到一个文件中。这样,我就可以通过管道将内容传送到netcat,netcat会将它在stdin上接收到的所有内容发送到我的ServerSocket。以下是我所做的: 一旦打开一个套接字,我就会得到一个输入流,如下所示:Java 如何确定netcat输入的结束?,java,sockets,networking,stream,netcat,Java,Sockets,Networking,Stream,Netcat,我正在尝试创建一个小程序,它接受连接并将接收到的所有内容转储到一个文件中。这样,我就可以通过管道将内容传送到netcat,netcat会将它在stdin上接收到的所有内容发送到我的ServerSocket。以下是我所做的: 一旦打开一个套接字,我就会得到一个输入流,如下所示: Socket socket = serverSocket.accept(); InputStream inputStream = new BufferedInputStream(socket.getInputStream(
Socket socket = serverSocket.accept();
InputStream inputStream = new BufferedInputStream(socket.getInputStream());
byte[] buffer = new byte[1024];
int count;
while((count = inputStream.read(buffer) > 0) {
outputStream.write(buffer,0,count);
}
countup.sh | nc localhost 9999
现在我正试图从输入中读取所有内容,写回URL并关闭连接。但是如何确定脚本何时完成?
让duckduckgo获得如下结果:
Socket socket = serverSocket.accept();
InputStream inputStream = new BufferedInputStream(socket.getInputStream());
byte[] buffer = new byte[1024];
int count;
while((count = inputStream.read(buffer) > 0) {
outputStream.write(buffer,0,count);
}
countup.sh | nc localhost 9999
这在处理文件时工作得非常好,但在我的情况下,一旦netcat不再接收任何输入,read将被阻止,我必须终止netcat,这实际上允许代码继续,但我无法再发送任何内容,因为套接字已关闭
我做了进一步的测试,并转储了缓冲区的内容(这次只有一个8字节的缓冲区;我将计数(向上)传送到netcat),结果是(hextdumps):
当倒计时结束时,它又卡在read()上了。
在处理延迟输入时,使用InputStream#available()
似乎也不可靠
编辑:
我使用的netcat
如下:
Socket socket = serverSocket.accept();
InputStream inputStream = new BufferedInputStream(socket.getInputStream());
byte[] buffer = new byte[1024];
int count;
while((count = inputStream.read(buffer) > 0) {
outputStream.write(buffer,0,count);
}
countup.sh | nc localhost 9999
countup.sh:
for i in {1..10}
do
sleep 1
echo $i
done
我找不到办法只能猜测输入何时结束,所以我只编写了我自己的客户端,它用NUL(我只处理文本)终止输入。您正在确定它。但你没有明白
netcat
未关闭连接,因此从read()
中永远不会得到-1。问题不在这里,而是你如何使用netcat
。好吧,告诉我如何正确使用netcat好吧,像你如何使用netcat
那样告诉我们,我们可能有一个起点。