聊天室服务器是怎样实现私下交谈的

koyl 2000-05-11 04:52:00
我在一个服务器程序的开发中,需将连接到服务器的客户,分成不同的组(组内客户数目不等),各组内进行不同的工作(如通过服务器转发数据)。有点类似于聊天室服务器要管理公开,私下交谈等。
是否要为每一个组创建一个线程和一个socket,这样如果线程创建的太多,管理起来很麻烦。
winsock2中有多点通信,不知有否帮助。
在C++ Builder中有没有控件可解决此问题。
我的程序实时性要求较高。
请各问赐教。谢谢
...全文
121 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanyingtanxi 2000-05-30
  • 打赏
  • 举报
回复
同意alexela的说法,在ClientRead事件中加入一个函数,参数包括发送方的Socket和目地方的Socket,然后在函数里判断是否是目地方,如下
vodi form1::mitan(AnsiString Message,TCustomWinSocket *SSocket,TCustomWinSocket *TSocket)
{
for (int i,i<ServerSocket1->Socket->ActiveConnections;i++)
{
if (ServerSocket1->Socket->Connections[i]=TSokcet)
ServerSocket1->Socket->Connections[i]->SendText(Message);
}
}
大致是这样,你试试看
alexela 2000-05-29
  • 打赏
  • 举报
回复
你在READCLIENT事件中加入代码,用全局变量指针指向读取的每个SOCKET 客户值(可用TSrings的DATA属性挂接用以标明客户的字符串和SOCKET 客户值)。利用TCOMBOBOX即可实现连接所要通讯的用户,再用服务程序传送数据,即可实现私下交谈。
还可以定义你自己的数据格式,分组管理(连接方法同上)。实现“房间”的功能,同时也为了减少服务程序的数据发送负担。提高速度。
如果你的程序要求实时性,我建议你用并发式服务,否则,用重复式服务要好一些(省力)。
若还有问题,请联系:alexela_2000@sina.com

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧