プロトコル バッファを使用してデータ構造を作成し、サーバー エンドで次のコードを記述して 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 を取得しなかったことが原因ではないかと考えました...