2 canot canot 于 2016.01.26 16:30 提问

关于java网络编程中获取输入流中数据的问题?

//服务器端接收消息的类。定制端口号为8888
serviceSocket = new ServerSocket(10000);
//获取socket。这个方法是阻塞式的
socket = serviceSocket.accept();
inputStream = socket.getInputStream();
byte buf[] = new byte[1024];
int len = 0;
len =inputStream.read(buf);
//打印客户端的消息
System.out.println(new String(buf,0,len));
//向客户端生成响应
outputStream = socket.getOutputStream();
outputStream.write("收到".getBytes());

使用如上代码没然后问题。服务端可以获取客户端的数据。客户端也可以获取服务端的响应。但如果把其中inputStream的读取数据方式改为如下:

while((len=inputStream.read(buf))>0){
//此处拼接客户端的消息
}

//在循环外向客户端相应
outputStream = socket.getOutputStream();
outputStream.write("收到".getBytes());

此时就会出错。服务端无法获取客户端的数据。客户端也无法获取服务端的响应。通过一个循环来不断读取流中的数据是io流的通常做法。为什么这儿不行。。。求解。

1个回答

devmiao
devmiao   Ds   Rxr 2016.01.27 08:20
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!