Linux下C语言实现TCP多线程聊天室
项目环境:系统 ubuntu12.04 LTS,开发工具 GCC4.6.3项目需求:1、客户端可以注册名字2、通知其余在线的客户端新用户进入聊天室3、新建一个线程服务客户端,随时接收客户端发送来的消息4、当接收到一个客户端的消息,服务端向每一个客户端转发一份(群聊)5、同时在线人数自行设置6、任何客户端可以随意随时进入或退出客户端代码上传:github(两个版本)chat_ver1:版本一chat
·
项目环境:
系统 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"退出聊天室
更多推荐
已为社区贡献2条内容
所有评论(0)