聊天室遇到的问题(总结了一下,重新开贴)
首先感谢大家热情回帖,回帖过程中,我又发现不少问题。需求不够详细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)放在线程里,发现不行。 谁能帮忙放在线程里.