我正在使用一些非常古老的网络代码,它从嵌入式设备接收一些基本和最少的信息(大约28个字节),以便在某些WPF控件中显示。
我一直在搞乱网络代码,因为嵌入式设备有时会在这里和那里错过一条消息。
在接收端,已使用的网络循环如下:
private void ReadTCPData() {
var btReadBuffer = new byte[256];
var nRead = 0;
while (!bStop) {
if (stream.CanRead) {
if (stream.DataAvailable) {
try {
nRead = stream.Read(btReadBuffer, 0, 256);
}
catch {
_isCommError = true;
}
ParseData(btReadBuffer, nRead);
}
}
Thread.Sleep(10);
}
}
如果我替换nRead = stream.Read(btReadBuffer, 0, 256);
(流对象只是tcpClient.GetStream()
)
带
nRead = tcpClient.Client.Receive(btReadBuffer, 0, 256, SocketFlags.None);
我基本上完全相同的行为。
话虽如此,我试图理解做stream.Read()
和client.Receive()
之间的区别?
编辑:
嗯,我认为从技术上说这是重复的,但答案令人失望,缺乏现有问题的细节。