2012-07-23 117 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