Windows控制台socket之Select模型聊天室

前言:不会QT和MFC,所以就在控制台实现socket之Select模型聊天室。

一、概述

程序使用到MySQL(很简单的运用)技术和Select编程模型,以MySQL数据库中关系辅以socket编程实现对目标好友或群组发送接收消息。可以同时允许多人(可以修改人数)对各自好友各自的群里进行愉快的通信。

1、 MySQL
主要提供用户之间的关系,供socket显示在线的用户,以及各自的群组。

2、 Socket主要实现消息处理
【1】服务端:用户U_ID和Socket关系的对应(为什么不是IP,因为IP会经常改变,不能保证固定, 主要是没想到),保证转发到正确的用户,通过Select模型非阻塞模式收发消息,服务器解析数据包,根据消息类型做出不同的处理,普通消息直接转发就可以了(分为好友信息、群组信息),文件消息需要单独处理(上传、下载)。
【2】客户端:确定发送消息的类型、目的地,单独线程接收消息保证消息不会阻塞。

二、功能框图

Windows控制台socket之Select模型聊天室_第1张图片1、 数据库模块
数据库模块分为MySQL配置和MySQL操作。
(1)MySQL配置:读取配置文件config.txt,连接MySQL。
(2)MySQL操作:基于基础的MySQL函数自己封装适合自己的MySQL操作。

2、 socket模块
Socket模块又分为服务端Server和客户端Client。
(1)Server

  1. 初始化套接字,开启监听套接字。
  2. 管理连接的套接字数组,如果有连接就在数组中增加对应套接字,如果有断开就在数组中删除对应套接字。
  3. 处理信息,如果是套接字自身消息就更新对应套接字,如果是普通消息就转发,如果是文件消息就单独处理。

(2)Client

  1. 初始化套接字,连接服务器。
  2. 选择对象发送消息、文件,单独线程接收信息。

3、 用户模块
用户模块分为注册和登录。
(1)注册:添加新的账号(没用到,因为后续没有加好友和群组的功能,我是直接在数据库里改的)
(2)登录:登录才是重点,登陆后执行各种操作

  1. 好友聊天
  2. 群组聊天
  3. 文件上传和下载

4、 信息模块
信息模块主要分为三大类。
(1)自身信息:登录后发送自身U_ID给服务端,绑定socket
(2)聊天信息:分为好友和群组
(3)文件信息:分为上传和下载
Windows控制台socket之Select模型聊天室_第2张图片

三、Select模型

选择这个模型是因为在Windows五种模型里最简单,最容易理解(我)。

Windows控制台socket之Select模型聊天室_第3张图片
优点:解决了每一个客户端都去开辟新的线程与其通信的问题。
缺点:需要一个死循环不停的去遍历所有的客户端套接字集合,询问是否有数据到来,这样,如果连接的客户端很多,会影响处理客户端请求的效率。

四、代码

Github:https://github.com/2950833136/ChatRoom-Windows

你可能感兴趣的:(网络编程)