C#聊天客户端的聊天垃圾邮件自动阻止

时间:2012-07-23 04:21:31

标签: c# spam-prevention

我是C#的新手,所以 目前我正在研究这种局域网信使,供学校使用。信使本身的代码,包括我在互联网上找到的服务器和客户端,所以我没有自己编写所有这些代码。最基本的代码,如发送和接收消息已被复制。无论如何!我遇到了垃圾聊天的问题。客户端包含连接选项,以及用于所有传入消息的多行文本框,用于编写消息的文本框和用于发送消息本身的发送按钮。有没有办法阻止人们“垃圾邮件”聊天客户端?例如,如果用户在2秒内发送5条消息,则锁定“发送消息”文本框。怎么可以这样做?它不必锁定文本框,只要它阻止垃圾邮件用户发送更多邮件。 提前谢谢

2 个答案:

答案 0 :(得分:4)

首先要考虑的是从不信任客户。这意味着任何有权访问您的源代码,或者甚至知道服务器使用的协议的人都可以编写自己的客户端,这些客户端会整天发送垃圾邮件。

假设垃圾邮件仅来自使用您提供的客户端的人,您当然可以计算在给定时间范围内发送的邮件数量,并在超过阈值时禁用“发送”按钮。

假设这是使用WinForms,阻止按钮的代码将是:

btnSend.Enabled = false;

要跟踪最近历史记录中发送的消息数量,您可以创建类似

的内容
List<DateTime> messageTimestamps;

并将时间戳放在那里。

当有人发送消息时,请执行以下操作:

  • 从列表中删除超过(例如)2秒的所有条目
  • 将新条目添加到列表
  • 如果列表计数&gt; (例如)5,禁用发送按钮并丢弃此消息

此时您需要启动计时器以清除阻塞状态。看看

http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx

看看它是如何运作的。

答案 1 :(得分:0)

每次用户发送邮件时,也许计数器会计数,如果计数器达到5,请执行任何操作以防止用户发送其他邮件。然后只需使用Timer对象每2秒重置一次计数器。

int spam = 0;
Timer timer = new Timer(2000);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Enabled = true;

static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
    spam = 0;
}

if (spam < 5)
{
    //send message as usual
    spam++;
}
else
    //notify user that sending messages has been disabled, please wait 'x' seconds to send another message