⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qqserver.cpp

📁 本人自己做的一个c++builder聊天工具,由一个服务端ServerClient和客户端ClientSocket
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "QQServer.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SUISkinEngine"
#pragma link "ShockwaveFlashObjects_OCX"
#pragma resource "*.dfm"
TQQForm *QQForm;
//---------------------------------------------------------------------------
__fastcall TQQForm::TQQForm(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------

void __fastcall TQQForm::FormCreate(TObject *Sender)
{
Server->Port=50;
Server->Active=true;
m_iClientNum=0;
m_sIsName="NA";
m_sIsChat="CT";
m_sIsCommand="CO";
m_sPart="#";
m_sTo="ALL";
Listen->Enabled=false;
Close->Enabled=true;
Application->OnException=AppException;
TDateTime NowTime;
NowTime=Now();
Bar->Panels->Items[2]->Text=NowTime.DateTimeString();

}
//---------------------------------------------------------------------------
void __fastcall TQQForm::AppException(TObject *Sender,Exception *E)
{
Application->ShowException(E);
Application->Terminate();
}
//-----------------------------------------------------------------------
void __fastcall TQQForm::ServerAccept(TObject *Sender,
      TCustomWinSocket *Socket)
{
String ClientNum;
m_iClientNum++;
ClientNum.sprintf("有%d台客户连接",Server->Socket->ActiveConnections);
Bar->Panels->Items[1]->Text="连接成功!";
Bar->Panels->Items[0]->Text=ClientNum;
UserAddr->Items->Add(Socket->RemoteAddress);
for(int i=0;i<Server->Socket->ActiveConnections;i++)
Server->Socket->Connections[i]->SendText("CLEAR");
Sleep(90);
}
//---------------------------------------------------------------------------

void __fastcall TQQForm::ServerClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
String sTemp,sPre,sWelcome;
sTemp=Socket->ReceiveText();
sPre=sTemp.SubString(1,2);
if(sPre==m_sIsName)
{
String sName;
sName=sTemp.SubString(3,sTemp.Length()-2);
UserName->Items->Add(sName);
for(int i=0;i<Server->Socket->ActiveConnections;i++)
{
for(int j=0;j<UserName->Items->Count;j++)
{
String Name;
Name=UserName->Items->Strings[j];
Server->Socket->Connections[i]->SendText(Name);
Sleep(90);
}
sWelcome=m_sIsChat+m_sPart;
sWelcome+=String("大家欢迎"+sName+String("的光临!"));
Server->Socket->Connections[i]->SendText(sWelcome);
}
}
if(sPre==m_sIsChat)
{
String To,Chat;
int Pos;
To=sTemp.Pos(m_sPart);
To=sTemp.SubString(3,Pos-3);
Chat=m_sIsChat+sTemp.SubString(Pos,sTemp.Length()-Pos+1);
if(To==String("ALL"))
for(int i=0;i<Server->Socket->ActiveConnections;i++)
Server->Socket->Connections[i]->SendText(Chat);
if(To!=String("ALL"))
{
int iIndex=UserName->Items->IndexOf(To);
Server->Socket->Connections[iIndex]->SendText(Chat);
}
}
}
//---------------------------------------------------------------------------

void __fastcall TQQForm::ServerClientDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
String Temp;
Temp.sprintf("%s断开连接!",Socket->RemoteAddress);
Bar->Panels->Items[1]->Text=Temp;
int iIndex=UserAddr->Items->IndexOf(Socket->RemoteAddress);
UserAddr->Items->Delete(iIndex);
UserName->Items->Delete(iIndex);
}
//---------------------------------------------------------------------------

void __fastcall TQQForm::ServerClientError(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ErrorCode=0;
}
//---------------------------------------------------------------------------


void __fastcall TQQForm::UserNameClick(TObject *Sender)
{
m_sTo=UserName->Items->Strings[UserName->ItemIndex];
Label2->Caption=String("向")+m_sTo+String("发信息!");
}
//---------------------------------------------------------------------------

void __fastcall TQQForm::Edit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Key==VK_RETURN)
{
if(cheak->Checked)
{
m_sTo="ALL";
Label2->Caption="向所有人发信息!";
}
String Temp;
Temp=m_sIsChat+m_sPart+Edit1->Text+String("(服务器说)" );
if(m_sTo==String("ALL"))
for(int i=0;i<Server->Socket->ActiveConnections;i++)
Server->Socket->Connections[i]->SendText(Temp);
if(m_sTo!=String("ALL"))
{
int index=UserName->Items->IndexOf(m_sTo);
Server->Socket->Connections[index]->SendText(Temp);
}
Edit1->Clear();
}
}
//---------------------------------------------------------------------------

void __fastcall TQQForm::DisableClick(TObject *Sender)
{
if(m_sTo=="ALL")
{
String sTemp;
sTemp.sprintf("真的要断开与%s的连接吗?","所有人");
if(MessageDlg(sTemp,mtConfirmation,TMsgDlgButtons()<<mbYes<<mbNo,0)==mrYes)
for(int i=0;i<Server->Socket->ActiveConnections;i++)
Server->Socket->Connections[i]->Close();
}
if(m_sTo!="ALL")
{
String sTemp;
sTemp.sprintf("真的要断开与%s的连接吗?",m_sTo);
if(MessageDlg(sTemp,mtConfirmation,TMsgDlgButtons()<<mbYes<<mbNo,0)==mrYes)
for(int i=0;i<Server->Socket->ActiveConnections;i++)
{
int index=UserName->Items->IndexOf(m_sTo);
Server->Socket->Connections[index]->Close();
}
}
}
//---------------------------------------------------------------------------

void __fastcall TQQForm::CloseClick(TObject *Sender)
{
if(Server->Active)Server->Close();
Listen->Enabled=true;
Close->Enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall TQQForm::ListenClick(TObject *Sender)
{
if(!Server->Active)Server->Open();
Listen->Enabled=false;
Close->Enabled=true;
}
//---------------------------------------------------------------------------


void __fastcall TQQForm::Button2Click(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------


void __fastcall TQQForm::FormShow(TObject *Sender)
{
AnimateWindow(QQForm->Handle,2000,AW_CENTER);
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -