-2

別のサーバーからファイルを受信し、それをクライアントに送信するサーバー (servera を呼び出す) について問題があります。問題は、クライアントがファイル サイズとして 0 を受け取るため、ファイルのバイトがゼロになることです。

/* receive file size from serverB */

recv(s,&bytes,sizeof(bytes),0);

/* send file size to client */

send(file_descriptor,&bytes,sizeof(bytes),0);

bytes = ntohs(bytes);

/* receive (from serverb) and send immediately (to client)*/

while (total != bytes) {
    nread = read(s,&c,sizeof(char));
    if(nread == 1){
        send(file_descriptor,&c,sizeof(c),0);
        total += nread;
    }
}

どうしたの?

4

1 に答える 1

1

すべてが間違っている可能性があります。

副作用に頼る前に、エラーの I/O 呼び出しを確認する必要があります。そうしないと、予測できない結果が得られます。

あなたの場合、おそらく最初のものrecv()が失敗し、初期化されずbytesに 0 のままになります。

また、一度に 1 バイトずつ読み取るループは非常に非効率的であり、そのバイトを送信できたかどうかを確認send()できません (再試行が必要な場合は失敗する可能性があります)。

于 2013-06-26T13:55:38.610 に答える