我目前正在使用C#TcpClient / TcpListener类来发送和接收两端的数据,但是一个奇怪的问题不断出现,这真的开始让我感到烦恼:
在调试环境(本地)中,一切都可以正常运行几个小时,几天......但是在应该使用该软件的实时环境中,几分钟/小时后,一些客户随机决定垃圾邮件传入用空包流。我用来读取它的代码是BeginRead,如下所示:
tcpClient.GetStream().BeginRead(Buffer, 0, Buffer.Length, new AsyncCallback(MessageReceivedNew), tcpClient.GetStream());
这对于大多数客户来说绝对没问题,但有些客户随机开始调用回调" MessageReceivedNew"运行几分钟/小时后,每秒几百次。即使在应用程序完全关闭或tcp客户端已断开连接之后阻止防火墙中的客户端,问题仍然存在。缓冲区始终为空(在随机垃圾邮件启动之前正常工作)。
我在回调中用来处理消息的代码是
int bytesRead = 0;
try {
NetworkStream ns = tcpClient.GetStream();
bytesRead = ns.EndRead(ar);
IsListening = false;
} catch (Exception ex) {
if (ex is IOException || ex is ObjectDisposedException) {
OnNetworkStreamException.Invoke(this);
} else {
OnUnexpectedError.Invoke(this, ex);
}
if (!IsExpectedToDisconnect) SocketExceptionCloseConnection();
OnClientDisconnected.Invoke(this, DisconnectType);
return;
}
...message processing...
Receive();