2

プロトコル バッファを使用してデータ構造を作成し、サーバー エンドで次のコードを記述して Java を使用してメッセージを送信し、クライアント エンドで C を使用してメッセージを受信します。

Java サーバー:

OutputStream os = socket.getOutputStream();
GameResponse.Builder builder=GameResponse.newBuilder();
builder.build().writeTo(os);
os.flush();
os.close();

C クライアント:

while ((n = ::recv(sockfd, buf, BUFFLEN, 0)) > 0) {
    write(STDOUT_FILENO, buf, n);
    len += n;
}

サーバーから送信されたメッセージは正しいことがわかりましたが、クライアントで受信できませんでした。while ループが壊れないように見えますが、デッド ループに陥りました。C の recv 関数がデータ転送を終了するための EOF を取得しなかったことが原因ではないかと考えました...

4

1 に答える 1

1

recv()0接続が閉じられていた場合に返します。

クライアント側から接続を閉じるには、 を呼び出してソケットを閉じますsocket.close()

于 2013-01-16T07:02:29.633 に答える