私は現在、あるアプリケーション(C++)でシリアル化し、別の(C#)で逆シリアル化する必要があるコードを作成中です。私はgoogle proto + protobuf-netを使用しようとしていますが、何かが失敗しています。Googleのprotobufによってシリアル化されたprotobuf-netでデータをデシリアライズする際の問題
.ccと.csの両方のメッセージ定義ファイルは、同じ.protoファイルのそれぞれのコンパイラで生成されました。
データはUDP経由で送信され、メッセージ(〜40B)は1つのデータグラムに簡単に収まります。 C++サイズに
、ブースト:: ASIOは、関連するコードされており、データを送信するために使用されている:
ProtocolBufferdata data;
...
boost::asio::streambuf b;
std::ostream os(&b);
data.SerializeToOstream(&os);
m_Socket.send_to(b.data(), m_Endpoint);
私はWiresharkのを使用しているので、私は、少なくとも見ることができ、これは正しく動作しているかなり確信しています私がデータグラムで期待しているすべての文字列。 C#の側では、開始/終了レシーブを使用して、我々はコールバックに次き:
byte[] buffer ....
public void ReceiveData(IAsyncResult iar)
{
try
{
Socket remote = (Socket)iar.AsyncState;
int recv = remote.EndReceive(iar);
using (MemoryStream memStream = new MemoryStream())
{
memStream.Write(buffer, 0, recv);
ProtoData data = ProtoBuf.Serializer.Deserialize<ProtoData >(memStream);
onReceive(data);
}
}
catch (Exception ex)
{
...
}
finally
{
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveData), socket);
}
}
バッファはそれにバイト数の期待値を持っている、とtell-物語の文字列を持っています。 protobuf-netコンテナにはすべてデフォルト値があります。
私はここで何が起こっているのか困惑しています。デバッガは、リモートデバッガではうまく動かない別のアプリケーションへのプラグインとしてデプロイされるため、クライアントアプリケーションに接続することはほとんど不可能です。私はアドバイスをいただければ幸いです。
うわー。 。 。私は本当にばかげている。答えをありがとう。 – Chuu