2012-07-23 2 views
0

저는 C#을 처음 접했습니다. 따라서 현재 학교에서 사용하기 위해이 LAN 메신저를 사용하고 있습니다. 인터넷에서 찾은 서버 및 클라이언트를 포함하여 메신저 코드이므로 모든 프로그램을 직접 프로그래밍하지 않았습니다. 아주 기본적인 코드. 메시지를 보내고받는 것이 복사되었습니다. 어쨌든! 인스턴트 메신저 채팅에 스팸을 보내는 사람들에게 문제가 있습니다. 클라이언트에는 연결 옵션뿐만 아니라 모든 수신 메시지에 대한 여러 줄 텍스트 상자, 메시지 작성 용 텍스트 상자 및 메시지 자체를 보내기위한 보내기 단추가 있습니다. 채팅 클라이언트를 "스팸"하지 못하게하는 방법이 있습니까? 예를 들어, 사용자가 2 초 안에 5 개의 메시지를 보내는 경우 "메시지 보내기"텍스트 상자를 잠그십시오. 어떻게이 일을 할 수 있겠습니까? 그것은 스팸받는 사용자가 더 많은 메시지를 보내지 못하도록 차단하는 한 텍스트 상자를 잠글 필요가 없습니다. 미리 감사드립니다.C# 채팅 클라이언트의 스팸 자동 차단

답변

4

먼저 고려해야 할 것은 입니다. 클라이언트를 신뢰하지 마십시오. 즉, 소스 코드에 액세스 할 수 있거나 서버가 사용하는 프로토콜을 알고있는 사람이라면 하루 종일 스팸 메시지를 보내는 자체 클라이언트를 작성할 수 있습니다.

제공하는 클라이언트를 사용하는 사람들이 스팸을 전송한다고 가정하면 특정 시간대에 보낸 메시지 수를 확실히 계산할 수 있으며 임계 값을 초과하면 보내기 단추를 사용할 수 없게됩니다. 무언가 같이

이 있습니다 사용 윈폼을 가정 할 때, 버튼을 차단하는 코드는 다음과 같습니다

btnSend.Enabled = false; 

은 최근 역사에서 보낸 메시지의 수를 추적하려면

List<DateTime> messageTimestamps; 
같은 것을 만들 수 있습니다

그리고 거기에 타임 스탬프를 넣으십시오.

사람이 메시지를 보낼 때이 작업을 수행 :

  • 보다 더있는 목록에서 모든 항목을 제거 (예를 들어) 이초 된
  • 목록
  • 경우]에 새 항목을 추가 목록 개수> (말하기) 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 
관련 문제