首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

聊天室遇到的有关问题(总结了一上,重新开贴)

2012-09-24 
聊天室遇到的问题(总结了一下,重新开贴)C/C++ code首先感谢大家热情回帖,回帖过程中,我又发现不少问题。需

聊天室遇到的问题(总结了一下,重新开贴)

C/C++ code
首先感谢大家热情回帖,回帖过程中,我又发现不少问题。需求不够详细1. 支持群聊2.支持私聊3.采用mfc的CAsynSocket尽心开发,用于小型局域网。4.tcp开发5.支持文件传输从回帖中总结的:为了支持群聊,私聊,利用服务器转发机制。客户单和服务端都定义如此数据结构struct 聊天{size_t type;        //群聊,私聊,文件char from[];char to[];char content[];        //文件、聊天消息size_t sendCount;    //发送的内容的字节数time_t time;        //发起方的时间};服务端:class CClientSocket:public CAysncSocket{};class CServerSocket:public CAysncSocket{};//为了维护,而建立的一个数据结构struct CClient        {CClientSocket socket;    char  name[];            //客户端名字time_t loginTime;        //上线时间time_t logoffTime;        //下线时间};//当有连接的时候,则进行分配一个CClient,然后对其成员socket赋值。 name可以暂时未空std::list<boost<CClient>::share_ptr> clientList;问题1: 什么时候对struct CClient        {CClientSocket socket;    char  name[];            //客户端名字};中的成员name进行赋值,客户单首先是connect,连接后, 客户端发送它自己的name给服务端,服务端然后赋值。然后服务端告诉所有的用户,某某上线。CAsyncSocket有个好处就是, 不用心跳包,只要客户单下线,那么服务端就收到。 是否需要开个定时器去不断发送用户状态?问题2:如果服务端开启 接受线程,如何操作?class CClientSocket:public CAysncSocket{publicvoid OnReceive( 参数){pDlg->OnRecive(this);    //自身传给对话框}};//通过传参数的方式,就知道哪个客户端与服务端通信,void CServerDlg::OnReceive(CClientSocket*  pSock){pSock->receive(,,,);            //接受数据}我想把    OnReceive(CClientSocket*  pSock)放在线程里,发现不行。 谁能帮忙放在线程里.


[解决办法]
一:select模型
二:WSAAsyncSelect模型
三:WSAEventSelect模型
四:Overlapped I/O 事件通知模型
五:Overlapped I/O 完成例程模型
六:IOCP模型

WSAEventSelect,IOCP 满好用

热点排行