私は私の学校のプロジェクトに問題がある、私がいるProtobufライブラリを使用しますが、私は次のエラーを持っている:Google.Protobuf.InvalidProtocolBufferException:プロトコルは、メッセージが無効なタグ(ゼロ)を含有していた
Google.Protobuf.InvalidProtocolBufferException" Protocol message contained an invalid tag (zero).
マイプロトコルメッセージラッパーであります
public void SendObject<T>(Protocol.Message.WrapperMessage.Types.MessageType type, T messageObject)
{
byte[] message;
// Serialize message
using (var stream = new MemoryStream())
{
((IMessage)messageObject).WriteTo(stream);
message = stream.GetBuffer();
}
byte[] wrapper = new Protocol.Message.WrapperMessage{Type = type, Payload = Google.Protobuf.ByteString.CopyFrom(message)}.ToByteArray();
Connection.SendObject<byte[]>("ByteMessage", wrapper);
}
そして、私のS:私は、メッセージを送信するためにこれを使用
syntax = "proto3";
package CardGameGUI.Network.Protocol.Message;
message WrapperMessage {
enum MessageType {
HELLO_MESSAGE = 0;
JOIN_ROOM_MESSAGE = 1;
JOIN_ROOM_RESPONSE_MESSAGE = 2;
}
MessageType type = 1;
bytes payload = 2;
}
ERVERハンドラ:
private void IncommingMessageHandler(PacketHeader header, Connection connection, byte[] message)
{
Protocol.Message.WrapperMessage wrapper = Protocol.Message.WrapperMessage.Parser.ParseFrom(message);
switch (wrapper.Type)
{
case Protocol.Message.WrapperMessage.Types.MessageType.HelloMessage:
GetClient(connection.ConnectionInfo.NetworkIdentifier).MessageHandler(Protocol.Message.HelloMessage.Parser.ParseFrom(wrapper.Payload.ToByteArray()));
break;
}
}
ラッパーメッセージは完全にアンシリアライズされ、そしてタイプが正しく一致しているが、私のペイロードの治療では、例外がポップします。
私は何か悪いですか?
ありがとう、ToArrayは解決策でした! :D –