我用socket传送几十个文件,采用先传送文件名,文件大小,再传送文件内容的方法。在本机上传送没有问题,但两个机器之间传送就有错误,奇怪的是,单步调试也没有问题。两个机器之间传输传过来的文件大小也变化了。不知道是什么原因,谁能告诉我,不胜感激!!
发送端:
   send(sock,char_filename,sizeof(char_filename),0);
    CString fullname=path+allfilename.GetAt(i);
CFile myFile;
if(!myFile.Open(fullname,CFile::modeRead | CFile::typeBinary))
{
return false;
}
int myfilesize=myFile.GetLength();
         CString str_filesize;
char char_filesize[1024];
str_filesize.Format("%d",myfilesize);
strcpy(char_filesize,str_filesize);
send(sock,char_filesize,sizeof(char_filesize),0);
int sendsize=0;
         while(sendsize<myfilesize)
{
char data[1024];
memset(data,0,1024);
UINT dw=myFile.Read(data, 1024);

int success=send(sock,data,1024,0);
if(success==-1) AfxMessageBox("error");
sendsize+=dw;
}
myFile.Close();接收端:
        success=recv(s,myFileInfo,sizeof(myFileInfo),0);
        if(success==-1)
{
                  //::Sleep(1000);
flag=false;
break;

CString str_file;
str_file=myFileInfo;
                  char char_filesize[1024];
memset(char_filesize,0,1024);
success=recv(s,char_filesize,sizeof(char_filesize),0);
if(success==-1) 
{
flag=false;
break;
}
       
CString filepath=path+"\\"+str_file;
CFile  myFile(filepath,CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);


            
            int int_filesize=atof((LPCTSTR)str_filesize);
UINT dwRead=0;

while(dwRead<int_filesize)
{
char data[1024];
memset(data,0,1024);
UINT dw=recv(s,data,sizeof(data),0);
if(dw==SOCKET_ERROR)
{
flag=false;
break;
}
else
{
if(dwRead+1024>=int_filesize)
myFile.Write(data,int_filesize-dwRead);
else
                myFile.Write(data,sizeof(data));
dwRead+=dw;
}
//delete []data;
}
myFile.Close();