-3

ファイル(任意のタイプ)から読み取り、ソケットにファイルデータ(バイナリデータ)を書き込むc ++コードを書き込もうとしているので、受信者はこのデータを取得してファイルを作成する必要があります。同じデータが表示されます。同じ形式の場合、問題はデータがまだバイナリであり、バイナリデータとしてファイルに書き込まれることです。ネットワークに送信せずにコードをテストした場合、それはうまく機能します!何か案が ?前もって感謝します 。注、この問題に影響する場合は、Ubuntu11.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 に答える