我写了一个文件传输的程序,基于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);
//////////////////////////////////////////////////////////////////
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);
//////////////////////////////////////////////////////////////////
解决方案 »
- 为什么这句模糊查询语句不能执行。急!!!!!
- VC中添加cpp和头文件以后程序编译不通过
- Unicode下,一个汉字有几个编码么?!
- 做界面程序,.NET方便还是BCB方便
- 急,求各位帮忙,显示数据或者文件
- UF100检验设备数据信息处理方法
- 如何使删除按钮的状态能随cListCtrl中是否有某项选中而改变啊?
- malloc和remalloc的问题。
- 如何在COM将数据库中的BLOB字段VARIANT类型转为SAFEARRAY(unsigned char)*
- VC写的OCX控件,VB调用它的触发事件就会报错?
- 属性框的问题
- 近期要做串口监听modem接收数据信息有没有做过PPP协议的兄弟给个指导,分不够再加
奇怪了.fread第一个参数不是char *吗?
另外.你发送完数据也可以直接关掉connect,然后客户端也可以得到关闭这个消息的.
msg[l-3]='\0';这里有问题!!