用ServerSocket接收数据,若传来的数据小于8K,如何确定数据的内容的实际大小呢

wangyelon 2003-03-28 09:31:34
在客户端我把文件分成几块,然后传送到服务端分批写到文件,
但是好象ServerSocket每次接收数据大小默认的都是8k,
如果有一块没有8k,怎样得到真实的数据呢?
如果你有用clientSocket和serversocket进行大文件的传输的例子,
发给我可以吗?愿意重谢!
我的邮箱 yelom125@sina.com
再次感谢大家!
(不好意思麻烦各位,这是我的毕业设计课题,
4月5号要答辩的,时间很紧,哎我也很急)
...全文
218 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangyelon 2003-03-29
  • 打赏
  • 举报
回复
哈哈,其实我也知道Socket->ReceiveLength是不可靠的,它好象总是8k,
看来是我走了一些弯路,结帖!
谢谢大家!
wangyelon 2003-03-29
  • 打赏
  • 举报
回复
好的,我去看看,
halfdream 2003-03-29
  • 打赏
  • 举报
回复
这个DELPHI版的贴子有我讨论的相关内容。
http://expert.csdn.net/Expert/topic/1487/1487162.xml?temp=.7828791
halfdream 2003-03-29
  • 打赏
  • 举报
回复
从我的感觉。非阻塞模式比线程阻塞模式要用好相对困难得多。
不过仅仅是把整个数据流整个取得,倒是简单。

楼主,Socket->ReceiveBuff(char *buff,int count)函数不是有个返回值吗?
它是实际读得的大小。
wangyelon 2003-03-28
  • 打赏
  • 举报
回复
阻塞模式要写线程,我的水平有些受限,有时间再试,
Socket->ReceiveText()?我知道这个方法,不过好象接受的数据量太少
我用Socket->ReceiveBuff(char *buff,int count)的,
接受的buff的大小就是自己设的count ,问题就出在这,如果有效数据是4k 而count是8k
或者更多,不能把count全写入文件呀。

bacer(键盘制造)兄说的:
每次发送数据之前在数据头部增加4个byte表示本次发送数据的长度,
也许可行吧,再等等其他人的意见,
spaceman 2003-03-28
  • 打赏
  • 举报
回复
没有什么ServerSocket每次接收数据大小默认的都是8k的说法,你想只接收一个字节都行。
ServerSocket有一个Socket->ReceiveText()函数,具体一次最多可以读多少字节记不清了,不过你可以在发送的时候控制一次发送不超过`1K的字符,大文件要分多次发送,因为一次发送太多字节容易造成网络阻塞。那么在 ServerSocket这边的Socket->ReceiveText()函数可以一次把所有的字符全部接收。这是非阻塞模式,阻塞模式有一个Read()函数,可以设置接收缓冲区的大小,一次最多读满缓冲区,可以多次读入,如果接收字数小于缓冲区,也同样可以,只是还有一个参数反映实际接受字节数。
jimzj 2003-03-28
  • 打赏
  • 举报
回复
放到一个缓冲组装后再操作
bacer 2003-03-28
  • 打赏
  • 举报
回复
接受数据大小是由receivebuf函数决定的啊,发送4K大小的数据是比较合理的。
局域网中发送大的文件数据4K和8K的速度是一样的。
或者每次发送数据之前在数据头部增加4个byte表示本次发送数据的长度,
另一端接受到后判断数据头的长度和实际接受的长度是否相同,然后作处理

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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