4
我目前正在研究代碼序列化在一個應用程序(C++),並需要在另一個(C#)反序列化它。我正在嘗試使用谷歌proto + protobuf網,但有些失敗。問題反序列化與谷歌protobuf序列化protobuf網數據
.cc和.cs消息定義文件都是使用它們各自的編譯器從相同的.proto文件生成的。
數據通過UDP發送,並且消息(〜40B)很容易放入單個數據報。
在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);
}
}
緩衝區確實有它的字節的預期數量,並有搬弄是非的字符串。 protobuf-net容器具有所有默認值。
我對這裏發生的事情感到有點困惑,並且幾乎不可能將調試器附加到客戶端應用程序,因爲它作爲插件部署到另一個與遠程調試器不兼容的應用程序中。我會很感激任何建議,這讓我很難過。
哇。 。 。我感到非常愚蠢。感謝你的回答。 – Chuu 2011-01-27 23:44:57