客户端通过DataOutputStream发送数据,到服务器端发现前面多了五个字节,何故?欢迎讨论,共同提高

efei 2005-08-24 03:31:54
在客户端通过DataOutputStream写入一段二进制数据,数据长度通过content-length传递给了服务器

但是调试了半天发现在客户端写入的数据前,凭空多了五个字节的数据,导致数据接收不完全

五个字节的数据可能是这样的:

39 61 34 0D 0A
36 38 64 0D 0A
38 61 63 0D 0A
39 61 34 0D 0A
……

大家也注意到每一条的第四、五个字节的数据是一样的
而第一条和第四条的数据又是一样的

那么这五个字节的数据表示什么呢?是从哪来的呢?

同时,也有极小的几率不会有这五个字节

连接方式是直连,没有用172那个代理。


在某一篇文章中,作者写到:
=======================================
调用flush ()方法的意图是发送已经写入的数据到DataOutputStream的服务器的缓冲区中。 在某些电话上,这个操作工作正常,在其他的电话上,它导致HTTP请求的Transfer - Encoding被设置为" chunked ",有一些随机字符被放到请求本身的前面和后面。那又怎样处理这个问题呢?这个方法调用实际上是根本不需要的。在接下来的一行中,服务器连接打开(通过openInputStream ()),将自动输入缓冲区。因此,你最好不要调用缓冲区的flush()方法。这个方法其余的部分保持不变,除了DataOutputStream对象必须在finally{;};语句块中关闭。
============================================

我也尝试不flush,但是依然有这个问题存在
...全文
409 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
prok 2005-08-29
  • 打赏
  • 举报
回复
继续mark
yyworld 2005-08-26
  • 打赏
  • 举报
回复
不要开HttpConnection,开销大且兼容性不佳。
开ContentConnection,自己封装数据包(数据长度+数据内容),保险没事。
n5 2005-08-26
  • 打赏
  • 举报
回复
程序贴出来看看
huangdeji 2005-08-26
  • 打赏
  • 举报
回复
上传文件的内容多了?
layueer 2005-08-26
  • 打赏
  • 举报
回复
up
cnesky 2005-08-26
  • 打赏
  • 举报
回复
mark,抽空再来看看
flyingdancing2005 2005-08-26
  • 打赏
  • 举报
回复
up
efei 2005-08-26
  • 打赏
  • 举报
回复
楼上的想法不错呀,看看去

to:huangdeji
没错,就是数据量比较大,超过2K了

四处找解码方法,周末回家试
网络咖啡 2005-08-25
  • 打赏
  • 举报
回复
关闭流的时候自动会将流的数据输出的.
efei 2005-08-25
  • 打赏
  • 举报
回复
这五个字节确实应该是因为chunked编码而产生的

但是这个chunked编码的前生今世却还没有搞明白

是什么原因导致数据自动被加上了chunked编码

是如何编码的,或者说,应该如何解码

更进一步地说,应该如何让它不要进行这种编码(没事编码做什么,累)


楼上的说过滤一下,我也是这么想的,呵呵。可以后来发现过滤了之后怎么少了五个字节
也就是说,多了这五个字节之后,总的长度好象没有变(那我本来的五个字节被挤到哪去了……)


这个破编码不知道是否和Content-Type有关系
prok 2005-08-24
  • 打赏
  • 举报
回复
如果那五个字节是固定大小得那么可以自己过虑一下
lulei204 2005-08-24
  • 打赏
  • 举报
回复
引用老大一句话:“刚才分析了半天,应该就是那个chunked编码”。
结贴。^_^

13,100

社区成员

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

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