我是C#的新手,所以 目前我正在研究这种局域网信使,供学校使用。信使本身的代码,包括我在互联网上找到的服务器和客户端,所以我没有自己编写所有这些代码。最基本的代码,如发送和接收消息已被复制。无论如何!我遇到了垃圾聊天的问题。客户端包含连接选项,以及用于所有传入消息的多行文本框,用于编写消息的文本框和用于发送消息本身的发送按钮。有没有办法阻止人们“垃圾邮件”聊天客户端?例如,如果用户在2秒内发送5条消息,则锁定“发送消息”文本框。怎么可以这样做?它不必锁定文本框,只要它阻止垃圾邮件用户发送更多邮件。 提前谢谢
答案 0 :(得分:4)
首先要考虑的是从不信任客户。这意味着任何有权访问您的源代码,或者甚至知道服务器使用的协议的人都可以编写自己的客户端,这些客户端会整天发送垃圾邮件。
假设垃圾邮件仅来自使用您提供的客户端的人,您当然可以计算在给定时间范围内发送的邮件数量,并在超过阈值时禁用“发送”按钮。
假设这是使用WinForms,阻止按钮的代码将是:
btnSend.Enabled = false;
要跟踪最近历史记录中发送的消息数量,您可以创建类似
的内容List<DateTime> messageTimestamps;
并将时间戳放在那里。
当有人发送消息时,请执行以下操作:
此时您需要启动计时器以清除阻塞状态。看看
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