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不能工作,或者为什么复制代码也能工作。你能发布你用来读取数据的客户端代码的片段吗?这可能会有帮助,至少我带了个主意。。如果你投了反对票,至少要说明原因,并且要更有建设性。