1、多人聊天系统 C+Builder 6用户说明书服务器程序图标服务器窗口界面监听:点击监听即开启服务器,监听各个用户登陆情况;断开:即断开服务器,在有用户在线时,会提示确认信息;禁止用户:断开某些用户的连接;内容框:显示连接用户的IP 和用户名;发送信息窗口:用来对所有在线用户发送信息或者对个别用户发送信息;状态栏:分别显示 用户连接数量、连接状态和目前时间。用户客户端程序图标用户窗口界面主机:设置服务器IP的地址;登陆:可以自设用户名登陆或者匿名登陆服务器;离开:断开与服务器的连接;接受消息窗口:显示服务器端和客户端发送的信息;发送窗口:发送信息内容;在线用户列表:显示在线的用户昵称,选中可进
2、行私聊对话;状态栏:分别显示本机IP地址,本机登陆状态和目前时间。附录:1、服务器代码/-#include #pragma hdrstop#include ChatServer.h/-#pragma package(smart_init)#pragma resource *.dfmTForm1 *Form1; int Num=0;/-_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner) ServerSocket1-Port=1500; ServerSocket1-Active=true; m_iClientNum=0; m_sIsN
3、ame=NA; m_sIsChat=CT; m_sPart=#; m_sIsCommand=CO; m_sTo=ALL; MenuListen-Enabled=false; MenuClose-Enabled=true; Application-OnException=AppException; TDateTime NowTime; NowTime=Now(); StatusBar1-Panels-Items2-Text=NowTime.DateTimeString();/-void _fastcall TForm1:ServerSocket1Accept(TObject *Sender, T
4、CustomWinSocket *Socket) AnsiString sClientNum; m_iClientNum+; sClientNum.sprintf(有%d台客户连接,m_iClientNum); /Num=m_iClientNum; StatusBar1-Panels-Items1-Text=连接成功!; StatusBar1-Panels-Items0-Text=sClientNum; ListUserAddr-Items-Add(Socket-RemoteAddress); for(int i=0;iSocket-ActiveConnections;i+) ServerSo
5、cket1-Socket-Connectionsi-SendText(CLEAR); Sleep(100);/-void _fastcall TForm1:ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) AnsiString sTemp; AnsiString sPre; AnsiString sWelcome; sTemp=Socket-ReceiveText(); sPre=sTemp.SubString(1,2); if(sPre=m_sIsName) AnsiString sName; sName=s
6、Temp.SubString(3,sTemp.Length()-2); ListUserName-Items-Add(sName); for(int i=0;iSocket-ActiveConnections;i+) for(int j=0;jItems-Count;j+) AnsiString sName; sName=ListUserName-Items-Stringsj; ServerSocket1-Socket-Connectionsi-SendText(sName); Sleep(10); sWelcome=m_sIsChat+m_sPart; sWelcome+=AnsiStrin
7、g(服务器说: 大家欢迎()+sName+AnsiString() 的光临!); ServerSocket1-Socket-Connectionsi-SendText(sWelcome); if(sPre=m_sIsChat) AnsiString sTo,sChat; int iPos; iPos=sTemp.Pos(m_sPart); sTo=sTemp.SubString(3,iPos-3); sChat=m_sIsChat+sTemp.SubString(iPos,sTemp.Length()-iPos+1); if(sTo=AnsiString(ALL) ) for(int i=0;
8、iSocket-ActiveConnections;i+) ServerSocket1-Socket-Connectionsi-SendText(sChat); if(sTo!=AnsiString(ALL) ) int iIndex=ListUserName-Items-IndexOf(sTo); ServerSocket1-Socket-ConnectionsiIndex-SendText(sChat); /-void _fastcall TForm1:AppException(TObject *Sender, Exception *E) Application-ShowException
9、(E); Application-Terminate();/-void _fastcall TForm1:ServerSocket1ClientDisconnect(TObject *Sender, TCustomWinSocket *Socket) AnsiString sTemp,sClientNum; m_iClientNum-; sClientNum.sprintf(有%d台客户连接,m_iClientNum); /Num=m_iClientNum; StatusBar1-Panels-Items0-Text=sClientNum; sTemp.sprintf(%s断开连接!,Sock
10、et-RemoteAddress); StatusBar1-Panels-Items1-Text=sTemp; int iIndex; iIndex=ListUserAddr-Items-IndexOf(Socket-RemoteAddress); ListUserAddr-Items-Delete(iIndex); ListUserName-Items-Delete(iIndex);/-void _fastcall TForm1:ServerSocket1ClientError(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent Er
11、rorEvent, int &ErrorCode) ErrorCode=0; /-void _fastcall TForm1:EdtSendKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) if(Key=VK_RETURN) if(EdtSend-Text=) ShowMessage(对不起, 不能发空信息!); else AnsiString sTemp; sTemp=m_sIsChat+m_sPart+AnsiString(服务器说:)+EdtSend-Text; if(m_sTo=AnsiString(ALL) ) for(in
12、t i=0;iSocket-ActiveConnections;i+) ServerSocket1-Socket-Connectionsi-SendText(sTemp); if(m_sTo!=AnsiString(ALL) ) int iIndex=ListUserName-Items-IndexOf(m_sTo); ServerSocket1-Socket-ConnectionsiIndex-SendText(sTemp); EdtSend-Clear(); /-void _fastcall TForm1:ListUserNameClick(TObject *Sender) m_sTo=L
13、istUserName-Items-StringsListUserName-ItemIndex; LabelNotice-Caption=AnsiString(向)+m_sTo+AnsiString(发信息!); /-void _fastcall TForm1:BtnToAllClick(TObject *Sender) m_sTo=ALL; LabelNotice-Caption=向所有人发信息; /-void _fastcall TForm1:MenuCloseClick(TObject *Sender) if(ServerSocket1-Active) if (m_iClientNum!
14、=0) if (MessageBox(Handle, 确实要断开连接吗? , 系统提示 , MB_OKCANCEL | MB_ICONQUESTION) = IDOK) ServerSocket1-Close(); MenuListen-Enabled=true; MenuClose-Enabled=false; ListUserAddr-Items-Clear(); ListUserName-Items-Clear(); m_iClientNum=0; StatusBar1-Panels-Items0-Text=有0台客户连接; StatusBar1-Panels-Items1-Text=服
15、务器断开连接; else ServerSocket1-Close(); MenuListen-Enabled=true; MenuClose-Enabled=false; ListUserAddr-Items-Clear(); ListUserName-Items-Clear(); m_iClientNum=0; StatusBar1-Panels-Items0-Text=有0台客户连接; StatusBar1-Panels-Items1-Text=服务器断开连接; /-void _fastcall TForm1:MenuDisconnectClick(TObject *Sender) if(
16、m_sTo=ALL) AnsiString sTemp; sTemp.sprintf(真的要断开与%s的连接吗?,所有人); if(MessageDlg(sTemp, mtConfirmation, TMsgDlgButtons() mbYes mbNo, 0) =mrYes) for(int i=0;iSocket-ActiveConnections;i+) ServerSocket1-Socket-Connectionsi-Close(); if(m_sTo!=ALL) AnsiString sTemp; sTemp.sprintf(真的要断开与%s的连接吗?,m_sTo); if(Mes
17、sageDlg(sTemp, mtConfirmation, TMsgDlgButtons() mbYes Items-IndexOf(m_sTo); ServerSocket1-Socket-ConnectionsiIndex-Close(); /-void _fastcall TForm1:MenuListenClick(TObject *Sender) if(!ServerSocket1-Active) ServerSocket1-Open(); MenuListen-Enabled=false; MenuClose-Enabled=true;/-void _fastcall TForm
18、1:btnsendClick(TObject *Sender)if(EdtSend-Text=)ShowMessage(对不起, 不能发空信息!);else AnsiString sTemp; sTemp=m_sIsChat+m_sPart+AnsiString(服务器说:)+EdtSend-Text; if(m_sTo=AnsiString(ALL) ) for(int i=0;iSocket-ActiveConnections;i+) ServerSocket1-Socket-Connectionsi-SendText(sTemp); if(m_sTo!=AnsiString(ALL) )
19、 int iIndex=ListUserName-Items-IndexOf(m_sTo); ServerSocket1-Socket-ConnectionsiIndex-SendText(sTemp); EdtSend-Clear();/-void _fastcall TForm1:FormCloseQuery(TObject *Sender, bool &CanClose) if (m_iClientNum!=0) CanClose = (MessageBox(Handle, 还有用户在线,确实要退出吗? , 系统提示 , MB_OKCANCEL | MB_ICONQUESTION) =
20、IDOK); else CanClose=true; /-2、用户客户端代码 /-#include #pragma hdrstop#include ChatClient.h/-#pragma package(smart_init)#pragma resource *.dfmTForm1 *Form1;/-_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner) m_sHostAddress=Powersock1- LocalIP; StatusBar1-Panels-Items0-Text=Powersock1- LocalIP; Cl
21、ientSocket1-Active=false; ClientSocket1-Address=m_sHostAddress; ClientSocket1-Port=1500; m_sSpeakTo=ALL; m_sIsName=NA; m_sIsChat=CT; m_sPart=#; m_HasConnected=false; TDateTime NowTime; NowTime=Now(); StatusBar1-Panels-Items2-Text=NowTime.DateTimeString();/-void _fastcall TForm1:ClientSocket1Connecti
22、ng(TObject *Sender, TCustomWinSocket *Socket) StatusBar1-Panels-Items1-Text=正在连接,请稍后.;/-void _fastcall TForm1:ClientSocket1Connect(TObject *Sender, TCustomWinSocket *Socket) Socket-SendText(m_sIsName+m_sName); AnsiString sTemp; sTemp.sprintf(%s登录成功!,m_sName); MenuConnect-Enabled=false; StatusBar1-Pa
23、nels-Items1-Text=sTemp; LabelNotice-Caption=m_sName+AnsiString(对所有人说.); m_HasConnected=true;/-void _fastcall TForm1:ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket) AnsiString sInfo; AnsiString sType; AnsiString sChat; sInfo=Socket-ReceiveText() ; sType=sInfo.SubString(1,2); if(sInfo=AnsiString(CLEAR) ListUser-Items-
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1