流式文件传输接收算法

dutousuan 2003-09-12 02:27:47
串行方式传送一个流式文件,
先发送信息头:"s_start$filename$filelen$"
发送没有问题,接收方式如下:
每次读256个字节,可能读到少于256个字节,所以
可能读到全部的信息头"s_start$filename$filelen$"
也可能读到部分信息头 如:"s_start$file"
余下的在下一包里读到,发送文件也一样
这样每次认为收到错误的信息头,造成接收错误

那位高人有能处理这种情形的好的算法?
谢谢!






...全文
117 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
dutousuan 2003-09-18
  • 打赏
  • 举报
回复
作了一个简单的YMODEM协议,希望能行
baggio_zyj 2003-09-15
  • 打赏
  • 举报
回复
凑份子:modem作为传输接入系统,对所有内容应该是透明传送。类似于ip包由osi第三层处理,而到了应用层就是你自己的数据了。所以如果出现接收错误,可能是其他原因,而不是modem加了几个字节所致!
invalid 2003-09-15
  • 打赏
  • 举报
回复
什么好算法,建立在程序员都不知道传输协议的基础上?
dutousuan 2003-09-15
  • 打赏
  • 举报
回复
俺就是想找个好算法呀
asimpleman 2003-09-15
  • 打赏
  • 举报
回复
gz
dutousuan 2003-09-15
  • 打赏
  • 举报
回复
接收没有问题,只是协议分在了不同的包里,俺现在多收几包把他们拼起来在解包,在不行可能就要写YMODEM或ZMODEM协议了。
yjy1001 2003-09-12
  • 打赏
  • 举报
回复
换一个方案实现,可能容易点
fathappy 2003-09-12
  • 打赏
  • 举报
回复
modem加的数据头是什么知道吗?如果是固定的话可以加进自己的协议里。
invalid 2003-09-12
  • 打赏
  • 举报
回复
那你这个方案就行不通了。换方案吧。
dutousuan 2003-09-12
  • 打赏
  • 举报
回复
modem自己加上的数据头,俺无法控制。
invalid 2003-09-12
  • 打赏
  • 举报
回复
>>问题是你不发信息头时,它不发,你发信息头时它就自动的加在前面,每次字节数不确定?
每次字节数怎么会不确定?,不是你自己定义的协议吗?
csdnxw 2003-09-12
  • 打赏
  • 举报
回复
哈哈,蔬菜开会!
dutousuan 2003-09-12
  • 打赏
  • 举报
回复
问题是你不发信息头时,它不发,你发信息头时它就自动的加在前面,每次字节数不确定,
不好弄呀
invalid 2003-09-12
  • 打赏
  • 举报
回复
>>因为modem发送第一包时会先发若干个无用字符(几百个左右)。
那就跳过这几百个啊。
dutousuan 2003-09-12
  • 打赏
  • 举报
回复
俺用的是modem,用FileRead();读取,即使是读够256个也可能收到不完整的信息头
刚好buf的最后几个,因为modem发送第一包时会先发若干个无用字符(几百个左右)。
invalid 2003-09-12
  • 打赏
  • 举报
回复
int iRecLen = ReadSocket(Buf,256-pos);
中的ReadSocket函数应该有此功能:读取少于等于指定长度的数据。
invalid 2003-09-12
  • 打赏
  • 举报
回复
读取时强制读取256个字节,如果读取少与256则继续读取,直到读取够了,或者网络异常了。
伪代码如下:
int pos = 0;//读取计数器
while (pos < 256)
{
int iRecLen = ReadSocket(Buf,256-pos);
strcpy(Recvbuf+pos,iRecLen);
pos+=iRecLen;
};

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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