[英]Exception with DataOutputStream but not PrintWriter
我已经开发了使用套接字的基本Java客户端/服务器。 使用PrintWriter
,一切都会按预期进行。 但是,如果我将服务器输出方法更改为DataOutputStream
,则客户端上的InputStream
的长度为0,并且最终超时。
服务器端
当我使用(1)时,它可以工作:
bufferOut = new PrintWriter(new BufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);
bufferOut.println(response);
但是当我使用(2)时不是:
bufferOut = new DataOutputStream(socket.getOutputStream());
bufferOut.write(response.getBytes("US-ASCII"));
客户端的InputStream
长度为0
遇到的唯一异常是当客户端超时并关闭套接字时-服务器随后抛出中断的管道异常。
客户端
DataInputStream in = new DataInputStream(socket.getInputStream());
String read = bufferIn.readLine();
我不明白什么? 缺少什么吗? 我还能提供什么帮助?
编辑
更新的客户端:
DataInputStream dis = new DataInputStream(socket.getInputStream());
int length = dis.available();
// create buffer
byte[] buf = new byte[length];
// read the full data into the buffer
dis.readFully(buf);
Log.d(TAG, "buffer length: "+buf.length);
// for each byte in the buffer
for (byte b:buf){
// convert byte to char
char c = (char)b;
// append
message_string += c;
}
仍然无法通过(2)取回数据-logcat buf.length = 0
println()
追加一个行终止符。 write()
没有。 readLine()
阻塞,直到读取行终止符,或者EOS或发生异常。
如果在一端使用readLine()
,则应在另一端使用BufferedInputStream.readLine(),
Writer
,而不是DataOutputStream.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.