铜仁市论坛

首页 » 分类 » 常识 » C语言实现简易聊天室
TUhjnbcbe - 2021/3/22 2:35:00

基于tcp实现群聊功能,本项目设计是在「windows环境下基于套接字(Socket)和多线程编程」进行开发的「简易聊天室」,实现了群聊功能,在VC6.0和VS运行测试无误。

运行效果

聊天室

分析设计

Windows下基于windows网络接口Winsock的通信步骤为「WSAStartup进行初始化」--「socket创建套接字」--「bind绑定」--「listen监听」--「connect连接」--「accept接收请求」--「send/recv发送或接收数据」--「closesocket关闭socket」--「WSACleanup最终关闭」。

通信流程

了解完了一个socket的基本步骤后我们了解一下多线程以及线程的同步。

多线程

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

Win32API下的多线程编程也就是两个函数的应用以及,具体案例这里不多做介绍。

线程的同步

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

1、「直接制约关系」,即一个线程的处理结果,为另一个线程的输入,因此线程之间直接制约着,这种关系可以称之为同步关系

2、「间接制约关系」,即两个线程需要访问同一资源,该资源在同一时刻只能被一个线程访问,这种关系称之为线程间对资源的互斥访问,某种意义上说互斥是一种制约关系更小的同步

windows线程间的同步方式有四种:「临界区、互斥量、信号量、事件。」

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

「创建事件内核对象」

「设置内核对象状态」

「堵塞等待事件内核对象直到事件内核对象的状态为受信」

一、怎样学习C语言?

很多人对学习C语言感到无从下手,经常问我同一个问题:究竟怎样学习C语言?我是一个高级编程师,已经开发了很多年的程序,和很多刚刚起步的人一样,学习的第一个计算机语言就是C语言。经过这些年的开发,我深深的体会到C语言对于一个程序设计人员多么的重要,如果不懂C语言,你想写底层程序这几乎听起来很可笑,不懂C语言,你想写出优秀高效的程序这简直就是天方夜谭。

2为什么C语言如此重要呢?

第一、C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。

第二、C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的windows,Unix,Linux,Mac,os/2,没有一个例外的,如果你不懂C语言,怎么可能深入到这些操作系统当中去呢?更不要说你去写它们的内核程序了。

第三、很多新型的语言都是衍生自C语言,C++,Java,C#...哪个不是呢?掌握了C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去开发了,这个再一次验证了C语言是程序设计的重要基础。还有啊,多说一点:即使现在招聘程序员,考试都是考C语言,你想加入it行业,那么就一定要掌握好C语言。

想必都知道QQ聊天对话框中,有一个抖动个功能,相信大家也都用过,但能否用C语言做出来呢?答案肯定是可以的!至于如何,今天就为大家分享出来!这就是今天的主题。

制作流程:简直简单的小编都不好意思说出来了。窗口的抖动其实就是让一个窗口在几个位置停顿一小下然后来回切换,就会形成抖动效果!仅此而已。

知识点不多,windowsAPI几个如此而已。

好了直接上代码

怎么样,大家看懂了吗?

学习不论讲不讲方法,最终都能学会。但是别人2个月学会了,而你却1年才学会,甚至更久)所以说,学习还是要讲究方法的。学习方法正确,事半功倍;学习方法不正确,事倍而功半。

预览时标签不可点收录于话题#个上一篇下一篇
1
查看完整版本: C语言实现简易聊天室