==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍


源码下载地址:
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版相关推荐

  1. 用c语言编写一个1V1聊天程序,socket多人聊天程序C语言版(二)

    1V1实现了,1V多也就容易了.不过相对于1V1的程序,我经过大改,采用链表来动态管理.这样效率真的提升不少,至少CPU使用率稳稳的在20以下,不会飙到100了.用C语言写这个还是挺费时间的,因为什么 ...

  2. socket多人聊天程序C语言版(一)

    ==> 学习汇总(持续更新) ==> 从零搭建后端基础设施系列(一)-- 背景介绍 socket编程client和server直接通信是很简单的,就是一个发送一个接收就完了,但这却是基础. ...

  3. java socket多人聊天室_如何运用Java socket实现多人聊天室功能

    如何运用Java socket实现多人聊天室功能 导语:如何运用Java socket实现多人聊天室功能呢?下面是小编给大家提供的代码实现,大家可以参考阅读,更多详情请关注应届毕业生考试网. 目录结构 ...

  4. java socket多人聊天_如何运用Java socket实现多人聊天室功能

    导语:如何运用Java socket实现多人聊天室功能呢?下面是小编给大家提供的代码实现,大家可以参考阅读,更多详情请关注应届毕业生考试网. 目录结构: ChatClient: package com ...

  5. socket多人聊天室c语言,一分钟实现网页多人聊天室【Socket.IO】

    socket.io是个基于node.js的快平台实时通讯框架.只用不到10行代码,就可以搭建一个简单的多人实时聊天室. 先来看看运行后的效果: socket.io多人聊天室 只要简单几步,就可以实现. ...

  6. Python 极简socket多人聊天群

    前言   别看目录又臭又长,其实可以直接从 第二章 开始看,因为 第一章 主要讲述socket的基础概念.但如果你只是想参考一下,可以直接跳到最后一章.   整个项目只使用了python的标准库,并建 ...

  7. Linux下socket多人聊天室

    目录 前言 一.聊天室的实验内容 二.逐个功能的简单分析 三.系统功能模块分解图 1.服务端功能模块图 2.客户端功能模块图 3.守护进程功能模块图 四.功能模块流程图 1.服务端流程图 2.客户端流 ...

  8. php socket多人聊天,socket.io实现多人聊天

    1. 后端环境搭建 # npm init # npm install -s express # npm install -s socket.io npm init 会生成json文件作为依赖包,exp ...

  9. linux socket 多人聊天软件,Linux Socket编程---TCP实现多客户端的网络聊天室

    #include//打开文件 int fd; //客户端socket int client_sock; //文件路径 char path[100]; //段口号 char port[100]; //发 ...

最新文章

  1. 解决Mac Pro上IDEA卡顿的问题
  2. js中执行到一个if就停止的代码_Node.JS实战64:ES6新特性:Let和Const。
  3. 636 起投资事件,吸金 574 亿
  4. 七种Vue3传值方式
  5. 如何自行分析SAP WebClient UI开发环境里抛出的错误消息根源
  6. python PIL图像处理-框选
  7. 11.17 模拟:总结
  8. 小程序 wxml selectable_微信小程序 抽象节点
  9. RandomizedLogisticRegression ImportError解决思路参考
  10. 08-mysql-条件查询-常见函数与小结
  11. 让fedora满足你的日常办公和影音
  12. 创建精简的SharePoint页面
  13. 使用ActivityGroup来切换Activity和Layout,android入门开发与实战
  14. ansys模型导入matlab,ANSYS导入MATLAB
  15. ASU计算机科学专业大学排名,2013美国大学排名_计算机科学专业研究生排名
  16. 杭州亲历重要时间点记录
  17. python案例3:货币转换---初级
  18. 程序员 -- 当我彻底放弃自私自利后,前途变得一片光明,不能过多的只是关注自己的功夫,生活不能只局限在方寸虚拟世界里
  19. Modularity and community structure in networks
  20. AIX7.1 VMO 参数默认设置

热门文章

  1. 2021年中国非照片个性化礼品市场趋势报告、技术动态创新及2027年市场预测
  2. 第十六届“挑战杯”全国大学生课外学术科技作品竞赛总结
  3. 敏捷教练的六顶帽子|洞见
  4. Webpack配置实战
  5. 将KCF算法中的输入图像改为自己的摄像头(C++)
  6. 国外的WEB CRACK TEAM的破解发布网站
  7. freopen函数使用
  8. Photoshop照片转手绘效果动作分享
  9. 1.1. 鼠标取词 屏幕取词技术实现原理
  10. 数据结构与算法基本概念总结