Socket多人聊天MFC版
源码下载地址:https://github.com/coderxj/Socket-Group-Chat包括前面C语言版的1V1 和 多人聊天源码都有。coding 环境:VS2015 WIN10测试环境:VM虚拟机–>XP系统、2003server和主机WIN10语言:C++,类库MFC功能:基于服务器转发消息的多人聊天。主要原理:server给每个连上的client都创建一个线程单独管理,
==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍
源码下载地址:
https://github.com/coderxj/Socket-Group-Chat
包括前面C语言版的1V1 和 多人聊天源码都有。
coding 环境:VS2015 WIN10
测试环境:VM虚拟机–>XP系统、2003server和主机WIN10
语言:C++,类库MFC
功能:基于服务器转发消息的多人聊天。
主要原理:server给每个连上的client都创建一个线程单独管理,这样就能实现多个client同时chatting,其中消息转发还是要靠用户名和指定聊天对象名。
界面功能介绍:
1.首先启动服务器
2.打开client exe程序,输入服务器IP,如果在本机测试则不需要输入,默认就是27.0.0.1,否则需要输入服务器所在主机的IP
3.输入username和chatname,这时候不能回车,要用鼠标点击connect,当对方上线后,服务器会发送对方在线状态过来,显示在friend status 状态栏中。这时就可以在输入框中输入消息,回车发送。
4.若中途想切换聊天用户,则只需要改变chatname后回车,程序会自动把焦点定位到输入框,输入消息后回车j发ji送即可。
5.server可以显示用户的在线状态和在线人数
程序中的难点:
1.最重要的,就是在while循环中,注意要加一个sleep函数,因为当程序出问题,不阻塞的时候,或者正常情况下的while死循环,会导致CPU使用率暴涨,加了个sleep后就会正常。
2.检查在线状态的时候,我是用send空字符串过去测试client是否能收到,若不能收到,则表示client已经离线,但是这也产生了一个问题,那就是如果频繁d发送检测消息给client,会和正常发送的消息冲突,导致消息发送失败,经过测试,在100ms/次的时候client几乎不能接收到消息。当检测间隔越大的时候,发生冲突的几率越小,而且检测client的在线状态并不需要很及时,延迟个几秒也是可以接受的其实。这样就能保证数据发送的时候不会冲突了。
3.拦截回车消息,一般就是重写一个预处理消息函数,然后判断是否按下回车,但是这里不行,这样会拦截整个对话框的回车消息,我们只需要在两个地方拦截,一个是chatname edit 和 input edit,所以拦截回车消息的时候判断一个是不是这两个控件,可以根据控件句柄来判断。
程序的BUG:
1.因为使用的是阻塞、同步I/O模式,所以需要给每个client分配一个线程,因为一个程序所能创建的线程的个数是有限的,一般2000多个吧,这样就不能处理多于2000个client的请求了。而且server运行起来肯定也很吃力。
2.client不能快速的切换状态,因为server是每隔2s检测一次。
3.目前只能发送文字,还没有对图片,和其它的文件进行处理。
4.and so on
程序可以改进的地方:
1.界面更加cool,可以使用自绘控件技术。
2.可以增加注册、登陆界面,用数据库进行管理
3.增加添加好友功能,然后好友列表用头像显示
4.双击好友头像会出一个聊天对话框
5.用非阻塞、异步I/O模型,这样就可以实现一个线程管理多用户了。也可以处理高并发任务了。
6.and so on
更多推荐
所有评论(0)