如何管理多个SOCKET 有多个客户端连接一个服务端(有的客户端也可能是刚连进来的也可能是刚断开的),服务端每隔一分钟就向全部正在连接的客户端发一段数据。请问在MFC中用SOCKET类如何实现?请各位高手指教!谢谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 多播,广播,UDPTCP,保存客户端Socket,一个一个发过去。 用一个链表吧,/* * 增加客户端 */void CClientManager::AddClient( CClientContext *pClient ){ m_clientList.AddTail(pClient);}/* * 删除客户端 */void CClientManager::DeleteClient( CClientContext *pClient ){ m_cs.Lock(); POSITION pos1 = NULL; POSITION pos2 = NULL; for (pos1 = m_clientList.GetHeadPosition(); (pos2 = pos1) != NULL;) { CClientContext *pClientCText = (CClientContext*)m_clientList.GetNext(pos1); if (pClient == pClientCText) { m_clientList.RemoveAt(pos2); delete pClientCText; pClientCText = NULL; } } m_cs.Unlock();}/* * 删除所有客户端 */void CClientManager::DeleteAllClient( void ){ m_cs.Lock(); //删除客户端链表 POSITION pos = NULL; for (pos = m_clientList.GetHeadPosition(); pos != NULL;) { CClientContext *pClient = (CClientContext*)m_clientList.GetNext(pos); delete pClient; pClient = NULL; } m_clientList.RemoveAll(); m_cs.Unlock();} CObList m_clientList; //管理客户端链表 网络通信有个概念性的通信,连接。这样解释一下,接受udp包后在一定时间间隔内可以原路返回发送数据。TCP连接就是连接,断开后发送数据时需要重新连接。给客户端发数据,需要客户端有线程在等待数据包的到来,或者有进程一直在侦听网络的连接。也就是说,从莫衷意义上来说,客户端要有服务的线程才行。udp只要客户端和服务器之间维持心跳,在会话列表的机器,服务器都可以通知到。TCP只有连接存在才可以发送数据。 VC使用sql语句在更新中的问题 程序中在debug模式下,为什么会没有定义的宏,反而有效了 ? 视频录象:录好的文件的播放时间和录制的时间不一样?? 对话框类调用的问题(在线等) VC与XML CFileDialog 的问题 给大家推荐一个下电子书的地方 如何在WORD中移动控件 一个简单问题 ATL的组件在VB中调用的问题 VC/MFC 新手求助热心的大虾们!嘿嘿 求助,程序出现内存不能读的问题
TCP,保存客户端Socket,一个一个发过去。
/*
* 增加客户端
*/
void CClientManager::AddClient( CClientContext *pClient )
{
m_clientList.AddTail(pClient);
}/*
* 删除客户端
*/
void CClientManager::DeleteClient( CClientContext *pClient )
{
m_cs.Lock();
POSITION pos1 = NULL;
POSITION pos2 = NULL;
for (pos1 = m_clientList.GetHeadPosition(); (pos2 = pos1) != NULL;)
{
CClientContext *pClientCText = (CClientContext*)m_clientList.GetNext(pos1);
if (pClient == pClientCText)
{
m_clientList.RemoveAt(pos2);
delete pClientCText;
pClientCText = NULL;
}
}
m_cs.Unlock();
}/*
* 删除所有客户端
*/
void CClientManager::DeleteAllClient( void )
{
m_cs.Lock();
//删除客户端链表
POSITION pos = NULL;
for (pos = m_clientList.GetHeadPosition(); pos != NULL;)
{
CClientContext *pClient = (CClientContext*)m_clientList.GetNext(pos);
delete pClient;
pClient = NULL;
}
m_clientList.RemoveAll();
m_cs.Unlock();
}
这样解释一下,接受udp包后在一定时间间隔内可以原路返回发送数据。
TCP连接就是连接,断开后发送数据时需要重新连接。给客户端发数据,需要客户端有线程在等待数据包的到来,或者有进程一直在侦听网络的连接。也就是说,从莫衷意义上来说,客户端要有服务的线程才行。udp只要客户端和服务器之间维持心跳,在会话列表的机器,服务器都可以通知到。
TCP只有连接存在才可以发送数据。