2015-04-14 46 views
0

我正在使用協議緩衝區在C++和c#客戶端服務器應用程序之間發送和接收數據。我正在使用protobuf-net。 我有兩個原型文件,一個請求命令和一個響應命令。我能夠發送和反序列化從C#客戶端到C++服務器的命令。但我無法在c#中反序列化。 雖然我得到了c#中的字節數據,但是我得到了空的響應命令。 考慮代碼是一樣的東西如下:無法在C#中使用protobuf-net反序列化

proto.ResponseCommand rsp = new proto.ResponseCommand(); 
    using (var data = new MemoryStream()) 
    { 
    data.write (buffer,0,buffer.length); 
    rsp = Serializer.Deserialize<proto.ResponseCommand> (data); 
    } 

我得到了在緩衝區內的字節數據,但它並沒有在響應命令反序列化。

+0

不知道protobuf反序列化的實現,但它看起來像你永遠不會「倒回」內存流。嘗試設置 data.Position = 0; 其他明智的,它可能會嘗試從* current *位置讀取,它將不會返回任何數據。 –

+0

好點,但我以前沒有改變位置反序列化。我認爲這個問題是在反序列化過程中的某個地方,因爲在這個命令之前一切都很好。 @neil danson –

回答

0

我終於明白了。我沒有考慮到由client.Read命令返回的實際字節大小。 之後,我也倒回MemoryStream,感謝@neil danson