c++ socket线程池 发送消息_C语言开发socket多人聊天程序,程序员的逆天之路!

6497a1c900e6bf5c391893ab0ee8238d.png

这篇文章主要为大家详细介绍了socket多人聊天程序C语言版,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

08022e23fb696f4df33d66fd7b41a195.png
image


首先,不要一步登天直接解决多人聊天这个问题,先把问题化简。


1.多人聊天的核心问题是服务器如何标识不同的客户端,如何根据客户端的需求转发消息给指定客户端。


2.多人聊天转化为C-C聊天,但是不再是直接C-C,而是通过server转发消息,所以变成==>C-S-C。


3.server如何允许2个client同时连接,设置listen函数的第二个参数,最大连接数。


4.server如何标识两个client,用一个结构体数组来存放两个client的信息。


5.server如何转发消息给client,很简单,先接收到的发送给还没接收到的。如图:

c86e1ba39693e996c6a1af9e619c6a1c.png


6.server如何管理两个client的连接状态,连接成功很简单,就是accpet成功后就是连接成功了。

但是怎么判断连接断开呢?这个涉及到的select函数的使用,有点复杂~,所以我就简单的用了一个send函数发送一个空消息来判断是否断开连接,这个不严谨,容易出BUG,但是实践起来简单就使用了它。


7.要用线程来管理接收消息、发送消息、接受请求、管理连接状态。


技术要点:C语言线程函数的使用。

c6560083e45f194a9c6f58375025f867.png


例子:

1c1cbde33645af82b4c200d81fc6def8.png


1V1,C-S-C聊天例子:
编写环境:win10,VS2015

效果图:

ea290e52dac08f6f057b184f451137f7.png


server code

7921cd6fd1d8670776907e37d52e979e.png

b8586bc6017b1c8bfd5bc653ce756702.png

e482ebd7e2a5e47b3eb43090fd1a4809.png

a42d40dbf2e8f06184730ace3ade1f4e.png

55cf44c288a4ae9129bf7e529e3b952c.png


client code:

afe009ad7961ea42fdb46c84fa0bc19d.png

07e9b5efbfbb40b1e456273c1019918a.png

b8a9e49c2675ace8aabe4ee0cf9cd027.png


这程序还有一些BUG,其中最大的就是关掉一个连接后CPU使用率疯涨,我测试过我想到的可能,还是找不到结果~,希望有大神懂的告知一下。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多关注小编!
持续的学习才能让你永远保持上坡路!加油!

给大家准备了一份免费的C语言学习课程,赶紧来领取吧!

需要学习编程或者为了入行、转行学习编程的伙伴可以关注 工.众.号:【速学C语言】公众号回复“1024” 领取全套200G免费C/C++学习资料、视频!

89f8a00b12cd5d65289c6e98194598ef.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值