2012-07-23 120 views
0

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

回答

4

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

假设垃圾邮件来自使用您提供的客户端的用户,那么您肯定可以计算给定时间范围内发送的邮件数量,并在超出阈值时禁用发送按钮。

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

btnSend.Enabled = false; 

要跟踪在近代历史上发送的消息的数量,你可以创建类似

​​

并在其中放置时间戳。

当某人发送消息时,做到这一点:

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

在这一点上,你需要启动一个计时器来清除阻塞状态。看看

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

,看看它是如何工作。

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