-3

我正在尝试编写一个从文件(任何类型)读取并在套接字上写入文件数据(二进制数据)的 c++ 代码,因此接收器必须获取这些数据并创建一个文件,我应该看到相同的数据相同的格式,问题是数据仍然是二进制并作为二进制数据写入文件!如果在没有在网络上发送的情况下测试代码,它将运行良好!任何想法 ?提前致谢 。注意,如果它影响这个问题,我使用的是 Ubuntu 11.10 ..

这是客户端的代码:

filer=fopen("a.doc","rb"); 
fseek (filer , 0 , SEEK_END); 
long size; 
size = ftell (filer); 
rewind (filer); 
buffer = (char*) malloc (sizeof(char)*size); 
numr=fread(buffer,1,size,filer); 
fclose(filer); //some socket code 
char buffer2[size]; 
strcpy(buffer2 , buffer);
n = write(sockfd,buffer2,size); 

对于服务器端:

n = read(sock,buffer,length);
FILE * filew;
int numw;
filew=fopen("acopy.doc","wb");
numw=fwrite(buffer,1,len,filew);
fclose(filew);
4

1 回答 1

1

首先是你需要循环。read对和的调用write并不总是完整的缓冲区。 免责声明我无法在此处进行测试 例如:

numr=fread(buffer,1,size,filer); 
fclose(filer); //some socket code 
char buffer2[size]; 
strcpy(buffer2 , buffer);
n = write(sockfd,buffer2,size); 

char buffer2[size]; 
while ((numr=fread(buffer,1,size,filer)) != 0)
{
    strcpy(buffer2 , buffer);
    n = 0;
    while ((n = write(sockfd,buffer2+n,numr-n)) != 0)
       ; 
}
fclose(filer); //some socket code 
filer = NULL;

同样在服务器端

n = read(sock,buffer,length);
FILE * filew;
int numw;
filew=fopen("acopy.doc","wb");
numw=fwrite(buffer,1,len,filew);
fclose(filew);

FILE * filew;
filew=fopen("acopy.doc","wb");
int numw = 0;
while ((n = read(sock,buffer,length)) != 0)
{
    while ((numw=fwrite(buffer+numw,1,n-numw,filew) != 0)
       ;
}
fclose(filew);
于 2012-08-21T16:18:26.067 回答