黑马程序员技术交流社区
标题:
关于TCP编程获取网页的请求信息,数据长度丢失问题
[打印本页]
作者:
马睿
时间:
2012-9-19 21:47
标题:
关于TCP编程获取网页的请求信息,数据长度丢失问题
本帖最后由 马睿 于 2012-9-19 21:54 编辑
ServerSocket server = new ServerSocket(11000);
while(true)
{
Socket client = server.accept();
sop(client.getInetAddress().getHostAddress());
/*获得请求信息*/
InputStream inputStream_client = client.getInputStream();
BufferedInputStream buff = new BufferedInputStream(inputStream_client);
int len = buff.available(); /*问题发生在这里,获得长度为0*/
System.out.println("server:" + len);
byte b[] = new byte[1024]; /*问题发生的相关数组*/
/*这里调用buffer.read(b)也一样*/
inputStream_client.read(b);
System.out.println(new String(b));
/*输出欢迎信息*/
PrintStream outputStream = new PrintStream(client.getOutputStream(),true);
outputStream.println("你好客户端");
client.close();
}
复制代码
输出结果
server:192.168.3.101
server:0
GET /myweb/dex.html HTTP/1.1
Host: 192.168.3.101:11000
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
好的问题来了
我这里定义了一个BufferedInputStream ,装入了客户端发送过来的数据流
我想用buff.available()方法获得输入流的长度,结果得到的确是0
为什么呢???????
available()
返回可以从此输入流读取(或跳过)、且不受此输入流接下来的方法调用阻塞的估计字节数。
本来我想给一会用来读出数据的数组定义一个可变的长度len,但是这样为0的话就无法实现了
此外,既然这个流的长度是0了,那么,为什么我去read(b)的时候,还能读到东西呢????
蛋疼了。。。。难道只能定义一个足够大的数组去读么?
额外补充:
int len = buff.available(); /*问题发生在这里,获得长度为0*/
我在这个位置如果设置断点
然后我再打开网页,去打开地址http://192.168.3.101:11000/myweb/dex.html
在断点debug模式下,却能读到长度……………………什么情况。。。?正常运行读不到?
作者:
广驰
时间:
2012-9-20 10:32
我们知道网络是不稳定的,也就是说网络下载时,read()方法是阻塞的,说明这时我们用
available()获取不到文件的总大小,因为available()返回可以不受
阻塞
地从此输入流读取的字节数。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2