基于tcp怎样传输一个二进制(exe)文件?

luolovegui 2004-10-26 06:32:25
我写了一个文件传输的程序,基于tcp,发送一般的文本文件没有问题,但是发送二进制文件却有问题,我是基于二进制文件发送的,发送端没有问题,主要是接收的问题,接收的数据中间所有'\0'字节都丢失了,请问大家是如何搞定的。

/////////////////////////////////////////////////////////////////////
char msg[BYTEMAXLEN];

f=fopen(filename,"rb");
while (f!=NULL && !feof(f)) //发送
{
l=fread((void*)msg,1,BYTEMAXLEN,f);
if (l!=BYTEMAXLEN) msg[l]='\0';
send(client,msg,strlen(msg),0);
}
send(client,"^&*",3,0);
fclose(f);


/////////////////////////////////////////////////////////////////////

f=fopen(filename,"wb");
while (true) //接收
{
strcpy(msg,"");
l=recv(client,msg,BYTEMAXLEN,0);
if (msg[l-3]=='^' && msg[l-2]=='&' && msg[l-1]=='*') //发送完的标志
{
msg[l-3]='\0';
fwrite((void*)msg,1,l-3,f); //写入数据
break;
}
fwrite((void*)msg,1,l,f);
}
fclose(f);
//////////////////////////////////////////////////////////////////
...全文
254 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
9731boy 2004-10-27
  • 打赏
  • 举报
回复
l=fread((void*)msg,1,BYTEMAXLEN,f);

根据l这个值吧.把strlen换了.
奇怪了.fread第一个参数不是char *吗?
另外.你发送完数据也可以直接关掉connect,然后客户端也可以得到关闭这个消息的.
konista 2004-10-27
  • 打赏
  • 举报
回复
做个Base64编码好了
lsgt 2004-10-27
  • 打赏
  • 举报
回复
刚说的有一点没对,你那个循环可以保证从头发到尾。但是注意那个strlen(msg),它返回的是不包含最后那个\0的长度,但你读文件的指针已经到那个\0后面去了。所以所有的\0都被吃掉了。
lsgt 2004-10-27
  • 打赏
  • 举报
回复
send(client,msg,strlen(msg),0);不对。

文本文件只有在结束才有\0,所以没问题。别的类型的文件不是字符串类型,什么地方都可能有\0,而你那句只发送了从开始到第一个\0的数据出去。

把strlen(msg)改成你读出来的真实长度(你这里就是l吧)。
luolovegui 2004-10-27
  • 打赏
  • 举报
回复
上楼兄台错误,最后三个字符是我的文件传输结束标志,不能写入到文件中。

感谢帮忙,已搞定,确实是 strlen() 用错。
toxyboy 2004-10-27
  • 打赏
  • 举报
回复
你接收端的判断结束的逻辑有问题!判断接收到的数据是否>0决定是否继续fwrite。
msg[l-3]='\0';这里有问题!!
luolovegui 2004-10-27
  • 打赏
  • 举报
回复
lsgt() 没有说错,我的strlen()确实用错了,谢谢,我试试看行不行。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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