C++Socket传输二进制文件问题,求高手解答啊

Ron&&Li 2013-11-09 01:21:07
客户端只发送图片,服务端只接收图片,则毫无问题。现在要客户端发送图片,服务端接收图片,然后服务端将接受的图片在发送到客户端。这样就有问题了,服务端接到了图片,但是客户端接到的图片没有内容。部分代码如下,求高手指点啊~
客户端:
ifstream in("C:\\send.bmp",fstream::in|fstream::binary);
char buf1[1024]={0};
while(!in.eof())//如果没有到达文件末尾则继续
{
in.read(buf1,sizeof(buf1));
ret=send(clientSocket,buf1,1024,0);
if(ret==SOCKET_ERROR)
{
cout<<"Send Into error: "<<GetLastError()<<endl;
return -1;
}
}
in.close();
cout<<"文件发送完毕"<<endl;

ofstream out("C:\\accept.bmp",fstream::out|fstream::binary);
char buf2[1024]={0};
ret=1;
while (ret>0)
{
ret=recv(clientSocket,buf2,1024,0);
out.write(buf2,sizeof(char)*ret);

}
out.close();
cout<<"文件接受完毕!"<<endl;
closesocket(clientSocket);

服务端:
ofstream out("E:\\accept.bmp",fstream::out|fstream::binary);
char buf1[1024]={0};
ret=1;
while (ret>0)
{
ret=recv(clientSocket,buf1,1024,0);
out.write(buf1,sizeof(char)*ret);

}
out.close();
cout<<"文件接受完毕!"<<endl;
ifstream in("E:\\accept.bmp",fstream::in|fstream::binary);
char buf2[1024]={0};
while(!in.eof())//如果没有到达文件末尾则继续
{
in.read(buf2,sizeof(buf2));
ret=send(clientSocket,buf2,1024,0);
if(ret==SOCKET_ERROR)
{
cout<<"Send Into error: "<<GetLastError()<<endl;
return -1;
}
}
in.close();
cout<<"文件发送完毕"<<endl;
closesocket(clientSocket);
closesocket(serverSocket);
...全文
641 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
CK_t 2015-10-17
  • 打赏
  • 举报
回复
楼上正解!!!!
masterz 2013-11-10
  • 打赏
  • 举报
回复
while(!in.eof())//如果没有到达文件末尾则继续 { in.read(buf2,sizeof(buf2)); ret=send(clientSocket,buf2,1024,0); // 这里不对,不能假设从文件读了1024字节,int actual_read_size=in.gcount(); if(ret==SOCKET_ERROR) // 这样做是不够的,要检查看ret, send()不保证一次把所有的内容发送出去。 { cout<<"Send Into error: "<<GetLastError()<<endl; return -1; } }

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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