我正在尝试编写一个从文件(任何类型)读取的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);
答案 0 :(得分: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);