C语言聊天室基于tcp实现群聊功能,本项目设计(图)

C语言聊天室

群聊功能是基于tcp实现的。本项目的设计是在“windows环境下基于套接字(Socket)和多线程编程”开发的“简单聊天室”,实现了群聊功能。在 VC6. 0 和 VS2019 中运行测试没有错误。

运行结果

聊天室

分析与设计

Windows下基于Windows网络接口Winsock的通信步骤为“WSAStartup初始化”–>“socket创建socket”–>“绑定绑定”–>“监听监听”–>“连接连接”–>“接受接收请求” –> “send/recv 发送或接收数据” –> “closesocket close socket” –> “WSACleanup final close”。

沟通过程

了解了socket的基本步骤之后基于tcp的聊天室如何实现私聊,我们再来了解一下多线程和线程同步。

多线程

图片[1]-C语言聊天室基于tcp实现群聊功能,本项目设计(图)-老王博客

线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有进程资源。一个进程内的所有线程都使用相同的地址空间,这些线程的执行由系统调度程序控制,由系统调度程序决定哪个线程可以执行以及何时执行。“总之,多线程是为了提高系统的运行效率。”

Win32 API下的多线程编程也是这两个函数的应用,具体案例这里不介绍了。

线程同步

每个线程都可以访问进程中的公共变量和资源,所以“在使用多线程的过程中需要注意的问题是如何防止两个或多个线程同时访问相同的数据,以便不破坏数据的完整性”。数据之间的相互约束包括

1、“直接约束关系”,即一个线程的处理结果是另一个线程的输入,所以线程是直接约束的基于tcp的聊天室如何实现私聊,这种关系可以称为同步关系

2、“间接限制关系”,即两个线程需要访问同一个资源,该资源只能被一个线程同时访问。这种关系称为线程间资源的互斥访问。据说互斥是一种限制较少的同步关系

windows线程之间有四种同步方式:“临界区、互斥量、信号量和事件”。

本项目基于事件内核对象实现的线程同步。事件内核对象是一个抽象对象,具有可信和不可信两种状态。线程同步是通过等待来实现的。事件内核对象的使用流程如下:

“创建事件内核对象”

“设置内核对象状态”

“阻塞等待事件内核对象,直到事件内核对象的状态被信任”

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论