Socket多人聊天MFC版
==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍
源码下载地址:
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
Socket多人聊天MFC版相关推荐
- 用c语言编写一个1V1聊天程序,socket多人聊天程序C语言版(二)
1V1实现了,1V多也就容易了.不过相对于1V1的程序,我经过大改,采用链表来动态管理.这样效率真的提升不少,至少CPU使用率稳稳的在20以下,不会飙到100了.用C语言写这个还是挺费时间的,因为什么 ...
- socket多人聊天程序C语言版(一)
==> 学习汇总(持续更新) ==> 从零搭建后端基础设施系列(一)-- 背景介绍 socket编程client和server直接通信是很简单的,就是一个发送一个接收就完了,但这却是基础. ...
- java socket多人聊天室_如何运用Java socket实现多人聊天室功能
如何运用Java socket实现多人聊天室功能 导语:如何运用Java socket实现多人聊天室功能呢?下面是小编给大家提供的代码实现,大家可以参考阅读,更多详情请关注应届毕业生考试网. 目录结构 ...
- java socket多人聊天_如何运用Java socket实现多人聊天室功能
导语:如何运用Java socket实现多人聊天室功能呢?下面是小编给大家提供的代码实现,大家可以参考阅读,更多详情请关注应届毕业生考试网. 目录结构: ChatClient: package com ...
- socket多人聊天室c语言,一分钟实现网页多人聊天室【Socket.IO】
socket.io是个基于node.js的快平台实时通讯框架.只用不到10行代码,就可以搭建一个简单的多人实时聊天室. 先来看看运行后的效果: socket.io多人聊天室 只要简单几步,就可以实现. ...
- Python 极简socket多人聊天群
前言 别看目录又臭又长,其实可以直接从 第二章 开始看,因为 第一章 主要讲述socket的基础概念.但如果你只是想参考一下,可以直接跳到最后一章. 整个项目只使用了python的标准库,并建 ...
- Linux下socket多人聊天室
目录 前言 一.聊天室的实验内容 二.逐个功能的简单分析 三.系统功能模块分解图 1.服务端功能模块图 2.客户端功能模块图 3.守护进程功能模块图 四.功能模块流程图 1.服务端流程图 2.客户端流 ...
- php socket多人聊天,socket.io实现多人聊天
1. 后端环境搭建 # npm init # npm install -s express # npm install -s socket.io npm init 会生成json文件作为依赖包,exp ...
- linux socket 多人聊天软件,Linux Socket编程---TCP实现多客户端的网络聊天室
#include//打开文件 int fd; //客户端socket int client_sock; //文件路径 char path[100]; //段口号 char port[100]; //发 ...
最新文章
- 解决Mac Pro上IDEA卡顿的问题
- js中执行到一个if就停止的代码_Node.JS实战64:ES6新特性:Let和Const。
- 636 起投资事件,吸金 574 亿
- 七种Vue3传值方式
- 如何自行分析SAP WebClient UI开发环境里抛出的错误消息根源
- python PIL图像处理-框选
- 11.17 模拟:总结
- 小程序 wxml selectable_微信小程序 抽象节点
- RandomizedLogisticRegression ImportError解决思路参考
- 08-mysql-条件查询-常见函数与小结
- 让fedora满足你的日常办公和影音
- 创建精简的SharePoint页面
- 使用ActivityGroup来切换Activity和Layout,android入门开发与实战
- ansys模型导入matlab,ANSYS导入MATLAB
- ASU计算机科学专业大学排名,2013美国大学排名_计算机科学专业研究生排名
- 杭州亲历重要时间点记录
- python案例3:货币转换---初级
- 程序员 -- 当我彻底放弃自私自利后,前途变得一片光明,不能过多的只是关注自己的功夫,生活不能只局限在方寸虚拟世界里
- Modularity and community structure in networks
- AIX7.1 VMO 参数默认设置