不能说的秘密go 2016-01-26 08:30 采纳率: 60%
浏览 2065

关于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 2016-01-27 00:20
    关注
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?