小女子谢过先:如何用TClientSocket读取传送过来的不同长度且事先不知道文件长度的文件呢?;)

sharonwoo 2003-09-07 01:20:39
在使用TClientSocket和TServerSocket控件的传输文件的时候,它们有没有属性或者什么方法能够获取传过来的包的总长呢?
现在我的程序在传输的文件比较大,需要拆分成多个包传输,这个在传输时用SendBuf()可以自动进行拆分,但是在接收时,我用RevieveLength属性可以知道此次读的大小,再用ReceiveBuf()读取,那我事先必须知道传送文件的总大小,才知道这样分块读取buf什么时候才结束整个文件的读取。
请教一下各位高手:如何能很方便通用地的读取接收方事先不知道文件总长度的不同长度的文件呢?
...全文
36 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljlln 2003-09-23
  • 打赏
  • 举报
回复
你也可以把文件信息写在你发的文件流的指定位置、如:头部!
moncat 2003-09-22
  • 打赏
  • 举报
回复
TCustomWinSock 有receiveLength()方法可以知道当前传过来的数据长度
荣爵 2003-09-21
  • 打赏
  • 举报
回复
到www.maxss.net找找看
halfdream 2003-09-08
  • 打赏
  • 举报
回复
1,对TCLIENTSOCKET组件最常见的错误使用就是:
"RevieveLength属性可以知道此次读的大小,再用ReceiveBuf()读取"

RecieveLength返回的值不可靠的,
正确的做法是缓冲区设为定长,ReceiveBuf的返回值是实际读得的.

2,如果你传文件的双方没有传递文件长度的话,只能由发送方断开连接才算判断文件结束.
当然,定个协议,传一下文件长度等附加信息最好.


binbin 2003-09-07
  • 打赏
  • 举报
回复
是啊,定个协议,先传长度,再传文件.
mme 2003-09-07
  • 打赏
  • 举报
回复
如果用文件流的方式来发送就不用考虑这么多了。
自己分包传送一般都要先把长度发送过去。
binbin 2003-09-07
  • 打赏
  • 举报
回复
是啊,定个协议,先传长度,再传文件.
invalid 2003-09-07
  • 打赏
  • 举报
回复
小白,要先传长度再传内容,接收端就好办了
softman_2000 2003-09-07
  • 打赏
  • 举报
回复
有现成的控件可用的,TNMStrmServ和TNMStrm就可以实现服务器和客户端。
sharonwoo 2003-09-07
  • 打赏
  • 举报
回复
因为每次发送的文件长度不同,所以想有更方便直接的方法可以实现这个功能。
binbin 2003-09-07
  • 打赏
  • 举报
回复
自己在C/S双方定个协议,事先把文件长度发过去就是了

1,314

社区成员

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

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