是以二进制方式来传送文件的,对于文本文件传没什么问题,但是对于可执行文件等就出现异常现象了,比如说客户端还在发送,但是服务端却断开了,到底是我对二进制流的判断出了问题还是,其他的问题,希望有人能告诉我。
服务端:if( (stream = fopen( "I:\\d.txt", "wb" )) != NULL )
{
while (buff[0]!= NULL)//检查缓冲区
{
memset(buff,NULL,1024);
bufflen = recv(sockettemp,buff,1024,0);
if (buff[0]== NULL)
break;
numwritten = fwrite( buff, sizeof( char ),bufflen, stream );
send(sockettemp, config,4, 0);//发送确认消息
cout<<endl;
cout<<"Number of items write = "<<bufflen;
filesize=filesize+bufflen;
i++;
}客户端:
while (!feof(stream))
{
numread = fread( buff, sizeof( char ),1024, stream );
bufflen=send(socketServer, buff,numread, 0);
recv(socketServer,config,4,0);
cout<<endl;
cout<<"Number of items read = "<<numread;
memset(buff,NULL,1024);
cout<<"\t"<<config;
memset(config,NULL,4);
i++;
FileSize=FileSize+numread;
}
服务端:if( (stream = fopen( "I:\\d.txt", "wb" )) != NULL )
{
while (buff[0]!= NULL)//检查缓冲区
{
memset(buff,NULL,1024);
bufflen = recv(sockettemp,buff,1024,0);
if (buff[0]== NULL)
break;
numwritten = fwrite( buff, sizeof( char ),bufflen, stream );
send(sockettemp, config,4, 0);//发送确认消息
cout<<endl;
cout<<"Number of items write = "<<bufflen;
filesize=filesize+bufflen;
i++;
}客户端:
while (!feof(stream))
{
numread = fread( buff, sizeof( char ),1024, stream );
bufflen=send(socketServer, buff,numread, 0);
recv(socketServer,config,4,0);
cout<<endl;
cout<<"Number of items read = "<<numread;
memset(buff,NULL,1024);
cout<<"\t"<<config;
memset(config,NULL,4);
i++;
FileSize=FileSize+numread;
}
解决方案 »
- SetBitmapBits 和 GetBitmapBits怎么用?求救
- 在MainFrame中用create方法创建一个非模态对话不能响应控件消息,上面的按钮连点都点不动?
- 怎么能让主窗口大小变化时 窗口中的DockPageBar随主窗口变化而变化?
- unicode如何与点阵字库结合.
- 怎么设置CListCtrl里面行的高度
- 急请高手帮忙:如果将一位图,加入一些文字,输出为另一位图?
- DOS窗口中的字体设置~~
- 我想要作一个上宽下窄的对话框!梯形!
- 我写了一个Dll远程注入进程里表明注入是成功的.可注入的Dll没反应??下面是我的Dll,各位大哥大姐帮帮忙啊
- 怎么样把的附件中的录音机程序的原码显示出来?
- 寻求屏幕取字源代码
- 如何让对话框的一个子窗体始终在另一个子窗体上面?
那你说要怎么样去判断啊,为什么我传文本的时候就没问题,而传非文本的时候就有问题呢?
while (buff[0]!= NULL)//检查缓冲区不能用 buff[0] != NULL 作为结束标志
因为文本文件中一般不会有 0,但二进制的exe文件中就会有很多 0 了
所以你传送文本文件没问题,传送exe文件就有问题了正确方法应该先传送文件的长度,然后传送文件的内容
通过接收的总长度等于文件长度后,接收完毕