项目环境:

系统 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"退出聊天室

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐