Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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套接字写字节和换行符_Java_Sockets_Newline_Outputstream - Fatal编程技术网

Java套接字写字节和换行符

Java套接字写字节和换行符,java,sockets,newline,outputstream,Java,Sockets,Newline,Outputstream,我有个问题,我似乎不明白 如果我使用代码段: DataOutputStream dataoutput = new DataOutputStream(Socket.getOutputStream()); dataoutput.writeBytes(diagnostics); dataoutput.flush(); 输出:从服务器发送到客户端的诊断挂起,即使使用.flush也没有帮助。只有关闭套接字才能释放数据包 但是,如果添加换行符: dataoutput.writeBytes(diagnos

我有个问题,我似乎不明白

如果我使用代码段:

DataOutputStream dataoutput = new DataOutputStream(Socket.getOutputStream());

dataoutput.writeBytes(diagnostics);
dataoutput.flush();
输出:从服务器发送到客户端的诊断挂起,即使使用.flush也没有帮助。只有关闭套接字才能释放数据包

但是,如果添加换行符:

dataoutput.writeBytes(diagnostics+"\n");
它工作得很好。如果你复制代码

dataoutput.writeBytes(diagnostics);
dataoutput.writeBytes(diagnostics);
您得到的输出与使用/换行符的输出相同,但没有重复数据。为什么?

编辑:客户端

incoming = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
response = incoming.readLine();

正如good lads在评论中所说的,您应该使用flush强制将有效负载发送到流的目的地。但如果这不起作用,我建议尝试以下方法:

    DataOutputStream dataoutput = new DataOutputStream(System.out);

    dataoutput.writeBytes(diagnostics);
    dataoutput.flush();
现在目标将是本地控制台。而且流的源和目标之间没有远程连接,如果本地有任何东西工作正常,您可以自己尝试,关注DataOutputStream行为,然后开始处理远程流处理

是不是不多,但希望它能帮助一点


你好

我们怎么知道?您甚至没有告诉我们dataoutput是什么类型的……我的猜测是,您的输出中缺少了一行新行,而读者希望看到一行新行并挂起等待it@fstd它很可能是一个DataOutputStream。在这种情况下,writeBytes有点奇怪,因为它不能保证所有字节都被推送到服务器,所以您应该在每个writeBytes之后进行刷新以解决此问题。是的,这是一个DataOutputStream。我只是有点困惑为什么flush不能工作,或者为什么复制代码也能工作。你能发布你用来读取数据的客户端代码的片段吗?这可能会有帮助,至少我带了个主意。。如果你投了反对票,至少要说明原因,并且要更有建设性。