この問題はサーバー側で発生し、parseDelimitedFrom()が呼び出されました。
クライアント側:
C2SGainCard.Builder s = C2SGainCard.newBuilder();
C2SGainCard c2s = s.build();
GameRequest.Builder reqBuilder=GameRequest.newBuilder();
reqBuilder.setBody(c2s.toByteString());
reqBuilder.setName(C2SGainCard.class.getSimpleName());
reqBuilder.setPlayerId("3");
GameRequest request=reqBuilder.build();
DataOutputStream os = new DataOutputStream(socket.getOutputStream());
os.write(request.toByteArray());
os.flush();
os.close();
socket.close();
サーバーエンド:
try{
DataInputStream is = new DataInputStream(socket.getInputStream());
GameRequest gameRequest = GameRequest.parseDelimitedFrom(is);
}catch(Exception ex){
System.out.println(ex.getMessage());
}
そして、ここに別の同様の質問があります:
クライアント側:
C2SSell.Builder s = C2SSell.newBuilder();
CardOnSell.Builder cardOnSell = CardOnSell.newBuilder();
cardOnSell.setId(1);
cardOnSell.setPlayerId(3);
cardOnSell.setCardId(1);
cardOnSell.setCurrentPrice(111);
cardOnSell.setFixedPrice(555);
cardOnSell.setDescription("cao");
s.setCardOnSell(cardOnSell.build());
C2SSell c2s = s.build();
ソケット処理は同じでした。
サーバーエンド:
DataInputStream is = new DataInputStream(socket.getInputStream());
byte[] b = new byte[1024];
int len=is.read(b);
String as = new String(b, 0, len);
GameRequest gameRequest=GameRequest.parseFrom(as.getBytes());
parseFrom()を再度呼び出すと、サーバー側が中断することがわかります。しかし、2行コメントすると、次のようになります。
cardOnSell.setCurrentPrice(111);
cardOnSell.setFixedPrice(555);
クライアント側では、parseFrom()の呼び出しは問題なく機能しました。最初は、.protoファイルに問題があるのではないかと思いましたが、問題がないことが証明されています...では、この問題はどのようにして発生するのでしょうか。parseFrom()を呼び出す前にいくつかのデータが欠落しているためですか?