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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java网络编程—(2)I/O输入输出流
网络程序很大一部分的工作都是做简单或复杂的输入输出工作,将数据(信息)从一个系统转移到另外一个系统,所以在讲到网络编程之前我们首先要先了解到数据的输入输出工作。需要注意的是java 的基本输入输出流是以字节的方式来读/写数据的,输入输出(I/O,Input Output),都基本使用相同的方法,不论是FileInputStrean/FileOutputStream、TelnetInputStrea
java网络编程(URL类)
URL是java.net的一个重要类,使用URL创建对象的应用程序称为客户端程序。 读取URL中的资源 URL对象调用InputStream openStream()d public class look implements Runnable{ URL url; public void setURL(URL url){ this.url=url; } public void
关于socket的套接字中输入输出流的理解
socket就相当于客户端和服务器之间的一根管道,服务端创建一个指定端口的套接字端口,客户端使用该端口与服务器进行连接,形成了一根连通的socket的管道 使用DataInputStream对输入输出流进行包装,方便中文解析,防止乱码 1、个人认为输入输出流是(客户端和服务端)对于管道socket的而言的,由管道的一段传输数据到管道的另一端,此时就需要输出流,即:比如丛客户端输入到管道中,对于
Java网络编程 流
流的概述网络程序的很大一部分工作都是简单的输入和输出(I/O),而Java的I/O建立于流(stream)。 输入流读取数据,输出流写入数据。 过滤器(filter)流可以串链到输入流或输出流上。读/写数据时,过滤器流可以修改数据(例如,通过加密或压缩),或只是提供额外的方法,将读/写的数据转换为其他格式。 阅读器(reader)和书写器(writer)可以串链到输入流和输出流上,允许程序读/写文本
java中IO流中的对象操作流(2)——解决对象输入流读取对象出现异常的问题
解决对象输入流读取对象出现异常的问题 package com.itheima_07; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.Object
获取XML数据(输入流和String两种类型)并解析
从http://www.webxml.com.cn获取城市天气的XML数据,根据不同请求方式返回的两种类型的数据(流和String),采用pull解析
Java中的输入流
输入流的三种输入方式: 1)按行读取 2)按字符读取 3)按字节读取
Socket(网络编程)面试题
Java网络面试 1、什么是TCP协议?UDP协议?区别? TCP:传输控制协议,面向连接,可靠。保证数据传输成功。 UDP:不可靠。传输速度快。占系统资源少。 2、TCP三次握手? A——》B  通信请求以及序列号作为起始数据段。 B——》A  收到请求,序列号作为起始数据段。 A——》B  收到请求 Java网络编程 服务端套接字:ServerSocket。a
使用输入流读取数据
String path = ServletActionContext.getRequest().getRealPath("/"); path+="make/xlsprint/tFactory.xls"; FileInputStream is = new FileInputStream(new File(path)); /*****方案一:使用输入流读取模板,再写进输出流中****/ B
Java字符串和输入流的相互转换
在读取网络资源时经常要用到字符串和输入流之间的相互转化,找到了些方法,记录一下。 将字符串转化为输入流,代码如下: public static InputStream getStringStream(String sInputString){   if (sInputString != null && !sInputString.trim().equals("")){    try{