我寫了這個簡單的代碼讀取來自TCP服務器數據:TCP讀者失去一些數據
TcpClient myTcpClient = null;
NetworkStream myNetworkStream = null;
myTcpClient = new TcpClient(pRemoteIP, pPort);
myNetworkStream = myTcpClient.GetStream();
myNetworkStream.ReadTimeout=4000;
Byte[] bMesssage = Encoding.UTF8.GetBytes(pMessage);
myNetworkStream.Write(bMesssage, 0, bMesssage.Length);
Byte[] answer = new Byte[1024];
string sAnswer = "";
int offset = 0;
while (true)
{
myNetworkStream.Read(answer, offset, 1024);
sAnswer = Encoding.UTF8.GetString(answer);
if (sAnswer.Contains("#END#")) break;
Array.Resize(ref answer, answer.Length + 1024);
offset += 1024;
}
int i = sAnswer.IndexOf("#END#");
sAnswer = sAnswer.Substring(0, i);
myNetworkStream.Close();
myNetworkStream.Dispose() ;
myTcpClient.Close();
有時工作很好,而且讀取由服務器發送的數據的大塊,但有時「失去」了一些數據和讓我們說5000個字符而不是25000個字符。
它有什麼問題嗎?
我贊成@usr建議。但是,不使用Read所返回的計數不能解釋損失。相反,RRM可能會獲得大於預期大小的數組。 – Graffito
也許某些API無法處理這可能導致的零字符。我不知道爲什麼會這樣。也許OP只是誤診或代碼丟失。不會是第一次。例如,他的字符串將有多達1023個字符的差距。也許他沒有看到數據,因爲所有的視覺差距。 – usr