在做一个类似QQ的聊天软件,正在实现好友聊天模块,两个人单个聊天已经可以实现,问题是当一个人与多个人聊天时,会有多个聊天窗口接受不同的好友发来的信息,因为只有一个SOCKET来接受,所以当接收后会根据接收到数据传来的一个窗口ID来确定哪个窗口接受消息,从而确定是哪个好友发过来的消息,如何将这些窗口与SOCKET关联呢?因为在窗口创建时就关系到该是哪个窗口接受,还要通知好友客户端往这个窗口ID上发消息,我想了一些方法感觉都很烂,特求教一个比较好的实现算法,我第一次真正知道算法的重要性
解决方案 »
- 急~~~~~~CFile读取文件后怎么把文件中的内容以十六进制数转存到u_char array中
- 有关ostream_iterator,劳烦大牛了呵
- 如何在子线程中控制主对话框上的按钮?
- 自定义的类接收windows消息
- 高手来帮忙,onReceive函数怎么会出现有时不响应的情况.
- 结构体数组中的memmove的问题?
- 告诉大家一个好消息:微软居然为vss6.0作了sp6的补丁,大家可以去下载!
- 我想通过VC++编程读Word格式的文件,我该怎么实现?
- 如何截获Alt+Tab和Ctrl+Alt+Del?以及控制鼠标范围
- 关于图形显示的问题!
- 在static控件上显示位图问题。(缩放和显示)
- 套接字同步传输的问题
===============================================
算法很重要,,
另外我觉得这个更本不是算法问题,这个只是一个软件设计的问题。
不管你有和几个人同时聊天(也就是不管同时有几个SOCKET连接)收到消息后把所有消息都传送给一个消息分析器,由消息分析器具体分析这个消息是哪个人发的,然后再找到对应的窗口把聊天数据发送给窗口.
也就是SOCKET是个底层的东西window是上层的东西,通过一个管道把他们相连,而不是直接搞在一起
每个好友的号码不同,最初Findwindow找到这个对应的窗口就行,服务器传过来的消息当中一定包含好友的ID或者号码,一一对应就行了
每次发送消息时加上自己的ID号后面在跟消息!
接收到消息之后去数据库中查询昵称!
首先根据昵称判断窗口有没有,用FindWindow
如果有将消息给那个窗口,如果没有先创建,在给那个窗口!