[英]Reading from NetworkStream some time get corrupt data
我有一個 C++ 服務器發送訂單格式如下:前 3 個字節是消息長度,消息的 rest 是這樣的:
enum_code 狀態 0.000000 0.000000 52.260000 52.270000 0.000000 0.000000 0 0 0 0.000000 0.000000 0.000000 1000 0.000000 53.660000 名稱
我正在像這樣讀取緩沖區:
private void RecieveMsg(out String message)
{
message = "";
byte[] bytes = new byte[3];
while (!_netStream.DataAvailable)
{
}
//work around for gurbgh data from tcp connection;
Thread.Sleep(10);
if (_netStream.DataAvailable)
_netStream.Read(bytes, 0, 3);
string returndata = Encoding.ASCII.GetString(bytes);
//System.Console.WriteLine("RecieveMsg().Header:: " + returndata);
Int32.TryParse(returndata, out int number);
byte[] _temp = new byte[number + 1];
StringBuilder myCompleteMessage = new StringBuilder();
int totalByetsRead = 0;
int numBytesRead = _netStream.Read(_temp, 0, number + 1);
message += Encoding.ASCII.GetString(_temp, 0, numBytesRead);
totalByetsRead += numBytesRead;
while (totalByetsRead < (number + 1))
{
byte[] remaindata = new byte[(number + 1 - numBytesRead)];
numBytesRead = _netStream.Read(remaindata, 0, remaindata.Length);
totalByetsRead += numBytesRead;
message += Encoding.ASCII.GetString(remaindata, 0, numBytesRead);
}
message = Encoding.ASCII.GetString(_temp);
return;
}
如果我收到超過 10 條消息,我將開始閱讀其中的一些:
禁用 0.000000 0.000000 0.000000 0.000000.00 ????????????????????????
您的最后一條語句message = Encoding.ASCII.GetString(_temp)
會覆蓋您到目前為止在message
變量中建立的所有內容。 如果第一次讀取不包含完整數據,則第一個numBytesRead
字節之后的所有內容基本上都包含垃圾。
只需刪除這一行,您的代碼就會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.