CString str="960009|0|00000001|";
connect(sockClient, (SOCKADDR*)&addrClient, sizeof(SOCKADDR));
CFile myFile;
CString strFileName="C:\\ID0001_head.jpg";
myFile.Open(strFileName, CFile::modeRead | CFile::typeBinary);//已2进制码发送
int ret;
int nFileLength = myFile.GetLength(); //得到文件大小
CString strSect;
strSect.Format(_T("%d"),nFileLength);
str=str+strSect+"\n";
char *c=new char[str.GetLength()+1];
strcpy(c,str);
ret = send(sockClient, c, strlen(c)+1,0); //发送信息ret = send(sockClient, strFileName, nFileLength,0); //发送文件信息CString strFilePath="C:\\Text.jpg"; 
CFile file(strFilePath,CFile::modeCreate|CFile::modeWrite); //恢复为图片myFile.Seek(0, CFile::begin);
file.SeekToBegin();
char chBuf[1024] = {0};//定义每次发送长度为1024int num = 0;for(;;)
{
  num = myFile.Read(chBuf, 1024);
  file.Write(chBuf,num);
  if(num == 0) 
    break;
  ret = send(sockClient,chBuf, num,0); 
}
myFile.Close();
file.Close();Sleep(10); 
char recvBuffer[4];
ret=recv(sockClient, recvBuffer, 4, 0);程序如上所示,我目的是读出图片并发送(字符串信息后+“\n”+图片信息)出去。但对方接受后说我的图片信息有问题,不能恢复为jpg图片,我自己在源程序上加上了恢复图片的程序,图片可恢复。究竟是什么原因呢?我上面的程序哪里有错?各位大哥帮我看看,解决问题立即给分。非常感谢

解决方案 »

  1.   

    ret = send(sockClient, strFileName, nFileLength,0); //发送文件信息
    ?????????????
      

  2.   

    图片的保存格式中27或29个这“-”东西,前后也有。为什么你发送后不能拼装回去呢,就是SOCKET最大发送为64K,你的图片如果超过了,而你接收时又不检查接收的BUFF大小,没收完再投递RECV接收,当然格式不对啦。
      

  3.   

    图片信息必须完全是二进制数据,各位大哥帮我看看。个人感觉是
    ret = send(sockClient, strFileName, nFileLength,0); //发送文件信息
    这句话有问题。因为发送结构必须是(字符串信息后+“\n”+图片信息二进制数据),所以,我去掉上面这句话后,对方接收后依然图片信息有问题。
      

  4.   

    for(;;)
    {
      num = myFile.Read(chBuf, 1024);//如果只剩下200个字节呢? 返回的num是200,还是1024?
      file.Write(chBuf,num);
      if(num == 0) 
        break;
      ret = send(sockClient,chBuf, num,0); 
    }个人感觉,要么是接受者有问题,要么是结尾没有做好