C#TCPClient,BeginRead最终导致回调垃圾邮件

时间:2017-01-09 17:17:38

标签: c# tcpclient

我目前正在使用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();

0 个答案:

没有答案