没做过,以我的有限认识来回答一下楼主的问题1、心跳包是最好的检测客户端是否在线的方法,也是唯一的方法。(拔网线、停电 服务端无法收到通知)
2、客户端应该没必要做多线程。
3、发送文件一般通过p2p,或者上传服务器时应该是用ftp,都是另起线程来做,跟发送聊天数据应该是不同的模块。
4、服务端要用IOCP模型,当然是多线程的。
5、每个客户端连到服务器后他的socket对象就是唯一的,而服务器应该将此socket跟他的唯一标识id绑定。
2、客户端应该没必要做多线程。
3、发送文件一般通过p2p,或者上传服务器时应该是用ftp,都是另起线程来做,跟发送聊天数据应该是不同的模块。
4、服务端要用IOCP模型,当然是多线程的。
5、每个客户端连到服务器后他的socket对象就是唯一的,而服务器应该将此socket跟他的唯一标识id绑定。
解决方案 »
- MFC 有没类似于excel合并单元格功能的控件或者怎么实现
- TRACE
- 在一个服务进程中调用OpenProcess失败,什么原因?
- OPENFILENAME问题.
- 关于spy++的问题
- (急)为什么用gdi+类库不能将jpg图像绘制到静态文本框中,望不吝赐教,谢谢
- 请问在VC界面中如何改变字体的大小和颜色,以及有一个界面进入下一个界面的命令??
- 如何把CDHtmlDialog放在一个CControlBar上?
- 为什么VC++学了后面的又忘了前面的。如何有效率的学习VC++
- 以下是鼠标点击图片控件中一点得到该点在图片控件中的坐标的代码,如果有三个图片控件,怎样修改才能实现点击某点得到那点在所属图片控件中的坐标?不胜感激!
- MFC界面 Tab Control控件 键盘怎么切换TAB Page?
- 这种内存问题最头疼了好不啦!Unhandled Exception at XXXXX in xxx.exe Access Violation!
用map应该足够了
1.服务器端可以维护一张用户状态列表(客户名,ID,IP,状态,等等),每个用户登录,暂离,聊天,登出和断线都在该表中能够显示出来,各种客户端只要连上服务器,服务器就为该客户注册一个ID,然后改变其状态。
聊天系统很关键的就是客户端的状态问题,通过客户端之间的心跳包感觉效率低下
2.客户端发送数据不需要线程,简单点发送即可
3.transmitfile这个函数知道不知道,可以百度下,用这个函数就不用考虑文件和聊天消息的切换了
4.用IOCP,网上例子很多,随便搜搜
5.和第一个问题差不多,只要在列表中搜索一下就行了至于聊天内容,客户端可以与客户端直接通信,服务器只负责列表,这样就减少了服务器的压力。当然也可以客户端通过服务端转发,这样的话,服务端功能会更多一点
小小见解,有问题的话可留言讨论
具体看下这个
http://topic.csdn.net/u/20110220/12/144b6d5a-f541-43ac-984a-b3d471fc57ca.html
我跟我朋友测试了,他能发送消息给我,因为我的电脑做了端口映射,他发消息到我的路由器IP上我就能收到,但是我不能发送消息给他,我这边获取到对方的IP地址是对方的路由器IP,发送消息则发送到对方的路由器IP上,对方电脑收不到,请问有什么办法在对方不做端口映射的前提下发送消息到对方电脑(类似QQ)?
文件有个函数可以解决,TransmitFile()