关于从Socket流中读取数据的请教!

setimouse 2006-01-13 07:43:19
代码中有一个Socket

Socket fd;

它是用来将HTTP请求发送到WebServer,之后再取到WebServer的返回结果。例如:
发送:
GET http://www.sina.com.cn HTTP/1.0
...
...

WebServer会返回相应的结果:
HTTP 200 OK
...
...

我在代码中设置了相应的输入输出流

InputStream is;
OutputStream os;

is = fd.getInputStream();
os = fd.getOutputStream();

之后用is将请求数据(已转换成byte[])成功发送到WebServer。(通过抓包工具看出已成功发送)

接着用os进行接收

int iLength = os.available();
byte[] b = new byte[iLength];

os.read(b);

但是b却没有写入任何内容。

(这里要说明的是我通过抓包工具看出WebServer已经将正确的信息响应到本地)

请问在实现这个Socket流的接收过程中,我是否还要做些别的什么才能正确得到Socket的响应?

我听说有一个叫BufferedInputStream, BufferedOutputStream是否与这个有关?

是否是Socket数据流需要缓冲?
...全文
410 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
benq998 2006-01-13
  • 打赏
  • 举报
回复
java.io.InputStream.available()

在开发文档里有这样两句:

The available method for class InputStream always returns 0.

This method should be overridden by subclasses.

至于你所的 BufferedInputStream 类,你可以用它InputStream的实例作为构造函数创建一个BufferedInputStream类的实例,这个类的里边的available方法不需要从在,已经被实现。
setimouse 2006-01-13
  • 打赏
  • 举报
回复
楼上的方法对这个问题当然可以,但如果以后我需要交互的是流媒体信息的数据流,就必然得用到Socket。

所以还是希望求得用Socket处理的方法。
benq998 2006-01-13
  • 打赏
  • 举报
回复
既然你用的是http协议,那为什么不用已经封装好的类呢 。
java.net.URL
java.net.HttpURLConnection
java.net.URLConnection
这些类是专门用来处理HTTP协议的。

何必费是用Socket呢?!

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧