下のコードを使用して、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 バイトまたはファイルの実際のサイズよりも小さくなります。誰か理由を教えてくれませんか?(私は英語が苦手です、私の言っていることを理解しようとしてくれてありがとう)