0

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

4

2 回答 2

4

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

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

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

btnSend.Enabled = false;

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

List<DateTime> messageTimestamps;

并把时间戳放在那里。

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

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

此时,您需要启动一个计时器来清除阻塞状态。看一下

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

看看它是如何工作的。

于 2012-07-23T04:31:15.847 回答
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
于 2012-07-23T04:35:18.907 回答