完成端口的收发

hbyxh 2004-10-09 04:38:57
一个用完成端口写的服务器程序,在多个客户端连接成功后,要根据每个客户端发来的消息进行判断,再发送给客户端一些信息,问:应该怎么发给这些客户端?也就是说再这些客户端刚登录的时候我应该怎么保存这些客户端?把他的IP和端口号保存下来,然后新建个socket来发?
...全文
140 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdy119 2004-10-10
  • 打赏
  • 举报
回复
哈希表 或者MFC的CMap
应该是最好的选择,列表功能不太强
幻想树 2004-10-09
  • 打赏
  • 举报
回复
以前不是有人发了一个完成端口写的服务器源代码嘛?他里面用了lookaside技术,其实也可以学学,用来记录登陆了的用户,效率不错的。然后向完成端口发送多个WSAsend请求,直到发到所有用户。
cryptonym 2004-10-09
  • 打赏
  • 举报
回复
tcp的话把客户id和socket的指针关联起来发到一个哈希表里,要发给那个客户,直接根据id找到这个socket,发出去。

udp的话就要保留id和sockaddr结构。
batizhou 2004-10-09
  • 打赏
  • 举报
回复
用列表还不如用MFC的CMap
双杯献酒 2004-10-09
  • 打赏
  • 举报
回复
列表,
STL用list
头文件是
#include <list>

MFC才是
CList
gdy119 2004-10-09
  • 打赏
  • 举报
回复
可以用列表,即用STL;
typedef CList <SOCKET,SOCKET&> SOCKET_ARRAY;
SOCKET_ARRAY m_connectionList;
当有连接的时候, m_connectionList.AddTail(socket);
发送的时候:
for(POSITION pos = m_connectionList.GetHeadPosition(); pos != NULL;)
{
SOCKET tempSocket = (SOCKET)m_connectionList.GetNext(pos);
if (tempSocket == socket)
continue;
SendMsg(tempSocket,&msg);
}
batizhou 2004-10-09
  • 打赏
  • 举报
回复
将一个socket和一个客户对象关联在一起,从这个套接口收到数据时,找到对象,对象里存放和某个客户的交互信息,例如交互到哪一步了。从套接口能找到对象,同时客户对象也要建索引,这样在想给另一个客户发送消息时,才知道给哪个套接口发。
Zhymax 2004-10-09
  • 打赏
  • 举报
回复
在客户端连接时使用GetPeerName()得到ip何port,保存在用户列表中
hbyxh 2004-10-09
  • 打赏
  • 举报
回复
没人

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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