0

下のコードを使用して、2 つのクライアント間でソケット経由でファイルを転送しました。クライアントAがクライアントBにファイルを送信したい場合、そのファイルをサーバーに送信し、サーバーがそのファイルを受信した後、そのファイルをクライアントBに送信します.

私のコードは、ファイルを読み取って送信するために使用されます:

CFile f;
BOOL p=f.Open(fname,CFile::modeRead);   
char buff[1024];
int y;
int x;
if(!p)
    //print error msg
while(true)
{       
    y=f.Read(buff,1024);
    x=send(s,buff,y,0);     
    if(y<1024)
    {
        f.Close();
        break;
    }           
}   
send(s, "SENT|",6,0);

私のコードは、ファイルを受け取ってから書き込むために使用されます:

f.Open(fname,CFile::modeCreate | CFile::modeWrite);

while(true)
{       
    z=recv(sRecSocket,buff,512,0);
    if(z==SOCKET_ERROR)
    {
        break;
    }

    if(strncmp(buff,"SENT|",5)==0)
        break;
    f.Write(buff,z);
}   
f.Close();
send(sRecSocket,"RECV|",6,0);

しかし、プロジェクトを実行すると、ファイルがクライアント B に完全に送信される場合もあれば、そうでない場合もあります。ファイルはクライアント B に送信されますが、サイズは 0 バイトまたはファイルの実際のサイズよりも小さくなります。誰か理由を教えてくれませんか?(私は英語が苦手です、私の言っていることを理解しようとしてくれてありがとう)

4

1 に答える 1