用socket发送一个字节流,不知道长度的情况,怎么判断结束

CHZiroy 2012-10-22 11:49:00
两个问题,
1,我用socket发送一个文件给另一端,我是这样设计流的,前两个字节记录文件大小(当然,我的文件大小有限,这里两个字节足以描述大小),然后从第三个字节开始写入文件的内容。
接下来,在接收端就先读前两个字节,得到后面剩余部分(文件内容)的长度,然后根据这个长度创建一个字节数组,把流里剩余的内容读到这个数组里。。。
这里我想问,能不能在没有长度标志的情况,也能发送一个文件,并成功接受


2,客户端发送分为两步(没写出真正代码,只是写出大概意思)
stip 1: write(); // 第一步,写入500字节
setp 2: write() //第二步,写入1000字节
服务器端
setp 1: read() //第一步,接受500字节
step 2: read() //第二步,接受1000字节

如果这个时候,客户端发送了step1的500个字节
而服务器也已经接受了前面500个字节

然后,服务器开始了step2的读取,但是客户端还没开始发送step2的1000字节

那么会发生什么
...全文
632 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
老紫竹 2012-10-23
  • 打赏
  • 举报
回复
流是什么?就是一堆不知道是啥的连续数据。那么如何界定边界呢?
1 提前定义,告诉对方,我给你1000个字节
2 约定结束标志,比如大家约定ASCII的0就是结束,但要求你的数据内部可不能有0出现哦
3 你关闭连接好了,对方就认为结束了,

http1.1是第一种,有个ContentLength, http1.0是第三种,直接关闭连接。
cstur4 2012-10-23
  • 打赏
  • 举报
回复
流是不用你搞长度的,如果采用字节流一个一个读的话读到-1就是结尾,如果是文件流一行一行读那么读到null为结尾。

第二个问题,发生阻塞。等那1000个字节发来。

62,614

社区成员

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

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