IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Linux下C语言实现TCP多线程聊天室 -> 正文阅读

[网络协议]Linux下C语言实现TCP多线程聊天室

项目环境:

系统 ubuntu12.04 LTS,开发工具 GCC4.6.3

项目需求:

1、客户端可以注册名字
2、通知其余在线的客户端新用户进入聊天室
3、新建一个线程服务客户端,随时接收客户端发送来的消息
4、当接收到一个客户端的消息,服务端向每一个客户端转发一份(群聊)
5、同时在线人数自行设置
6、任何客户端可以随意随时进入或退出客户端

代码上传:

github(两个版本)
chat_ver1:版本一
chat_ver2:版本二

实现效果(版本一):

定义了信号量限制客户端登录数量。
ifconfig获取网络接口配置信息得到IPv4地址,用于准备通信地址:
在这里插入图片描述
编译:

gcc -std=gnu99 client.c server.c -c	
客户端1:伤心女孩

在这里插入图片描述

客户端2:快乐男孩

在这里插入图片描述

客户端3:愤怒老人

在这里插入图片描述
客户端输入"quit"退出聊天室

实现效果(版本二):

运用了消息队列、线程池、互斥锁、条件变量等定义了 网络通信结构,封装了包含打开网络通信对象、等待i并连接客户端、阻塞发送数据、发送字符串、阻塞接收数据、关闭网络通信对象的六个功能的network文件。用互斥锁和条件变量防止对线程资源的竞争。线程池优点是提高了线程管理性、降低资源消耗、提高响应速度。
网上找的图(参考):在这里插入图片描述
编译

(S)gcc -std=gnu99 array_queue.c server.c threadpool.c network.c -pthread
(C)gcc -std=gnu99 client.c -c 

./a.out 执行:
在这里插入图片描述

线程池启动,生产和消费的情况:
在这里插入图片描述

客户端1:快乐女孩

在这里插入图片描述

客户端2:忧郁男孩

在这里插入图片描述

客户端3:nigga

在这里插入图片描述

客户端输入"quit"退出聊天室

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-22 13:50:08  更:2021-08-22 13:51:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 15:30:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码