用户 密码
太平洋系列网站:太平洋汽车网 | 太平洋游戏网
首  页 | 数码世界 | 手机通讯 | 硬件资讯 | 软件资讯 | 招聘与培训 | 游戏天下 | 下载中心 科技动态 | 今日报价 | 渠道商情 | 产品大全 | 笔 记 本 | 教你买电脑 | 评 测 室 | 短信中心
论  坛 | 影音家电 | 摄影专区 | 玩家E族 | 竞技天地 | Flash 动漫 | 有奖活动 |

-
您现在的位置:软件资讯 > 开发特区 > 开发语言 > C++Builder
用C++Builder打造网上聊天软件-MyNetMeeting(2)

出处:PConline
责任编辑:pjl

[04-2-14 9:29] 作者:陈明浩
1.服务器端  

  ServerSocket:用于与多个客户端连接,当有 用户登陆时就把他的昵称和他的主机地址用两 个列 表对应地登记下来,并把当前的所有用户的信息( 包括昵称和主机地址)发送给刚刚登陆的该用户, 那么刚登陆的用户就有了所有在线用户的信息。同 时,服务器会把新登陆的用户的信息发送给所有已在线的用户,那么已在线用户就都得到新登陆用户的信息。当NetMeeting的时候,用户的信息首先发送到服务器端上,服务器端根据在线用户列表的记录再把该信息转发到所有在线用户,这样所有用户都会收到信息,从而实现了多人的NetMeeting。







主要代码:
void __fastcall TForm1::Button1Click(TObject *Sender) //关闭服务器
{
AnsiString SysInfo;
SysInfo="["+TimeToStr(Now())+"]"+" 与服务器失去连接!请重新连接!";
for(int i=0;i {ServerSocket1->Socket->Connections[i]->SendText(SysInfo);}
ServerSocket1->Close();
Form1->Close();
}

void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString Data=Socket->ReceiveText(); //接收用户发送的信息
AnsiString SubData1=Data.SubString(Data.Length()-7,Data.Length()); //分析信息
if(SubData1=="@login@@") //如果是用户登陆的信息
{
int AddLen=StrToInt(Data.SubString(1,2));
AnsiString Address=Data.SubString(3,AddLen);
AnsiString SubData2=Data.SubString(3+AddLen,Data.Length()-8-2-AddLen);
ListBox1->Items->Add(SubData2); //用户信息加入到用户列表
ListBox2->Items->Add(Address);
AnsiString SysInfo="["+TimeToStr(Now())+"]"+SubData2+" 加入了会议!";//显示系统信息
Memo1->Lines->Add(SysInfo);
}
else if(SubData1=="@logout@") //如果是用户退出会议
{
int AddLen=StrToInt(Data.SubString(1,2));
AnsiString Address=Data.SubString(3,AddLen);
AnsiString SubData2=Data.SubString(3+AddLen,Data.Length()-8-2-AddLen);
int Index1;
Index1=ListBox1->Items->IndexOf(SubData2); //从用户列表中删除该用户信息
ListBox1->Items->Delete(Index1);
int Index2;
Index2=ListBox2->Items->IndexOf(Address);
ListBox2->Items->Delete(Index2);
Memo1->Lines->Add("["+TimeToStr(Now())+"]"+SubData2+" 退出了会议!"); //显示系统信息
}
else
{
Data="["+TimeToStr(Now())+"]"+Data; //加入系统时间
Memo1->Lines->Add(Data);
}
if(m!=0)
{
for(int i=0;i {ServerSocket1->Socket->Connections[i]->SendText(Data);} //向所有用户转发信息
}}

void __fastcall TForm1::ServerSocket1Accept(TObject *Sender, //与客户端建立连接
TCustomWinSocket *Socket)
{
for(int i=0;i {AnsiString SysInfo1=IntToStr(ListBox2->Items->Strings[i].Length())+ListBox2->
Items->Strings[i]+ListBox1->Items->Strings[i]+"@login@@"; //把所有在线用户信息发给用户
ServerSocket1->Socket->Connections[m]->SendText(SysInfo1);
}
m=m+1;
}

void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender,//有用户退出会议
TCustomWinSocket *Socket)
{
m=m-1;
}


发给好友 投稿给我们 加入收藏 返回顶部

相关文章:
IT培训十大热门文章

内容搜索 
高级搜索
本栏今日焦点