从套接字接收到二进制数据后,使用c++将二进制数据写入文件

writing binary data to a file using c++ , after receiving from socket

本文关键字:二进制 数据 c++ 文件 使用 套接字      更新时间:2023-10-16

我正在尝试编写一个c++代码,该代码从文件(任何类型)中读取并将文件数据(二进制数据)写入套接字,因此接收器必须获取这些数据并创建一个文件,我应该看到相同格式的相同数据,问题是数据仍然是二进制的,并作为二进制数据写入文件!如果a在没有在网络上发送的情况下测试了代码,它会很好地工作!知道吗?提前谢谢。注意,如果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);

首先需要循环。对readwrite的调用将不总是满缓冲区免责声明,我无法在此测试例如:

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);