Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何确定netcat输入的结束?_Java_Sockets_Networking_Stream_Netcat - Fatal编程技术网

Java 如何确定netcat输入的结束?

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(

我正在尝试创建一个小程序,它接受连接并将接收到的所有内容转储到一个文件中。这样,我就可以通过管道将内容传送到netcat,netcat会将它在stdin上接收到的所有内容发送到我的ServerSocket。以下是我所做的:

一旦打开一个套接字,我就会得到一个输入流,如下所示:

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
那样告诉我们,我们可能有一个起点。