网络五子棋 一 关于务器端的设计

首先说明,此小程序是写完后才更新本博客的,所以程序中涉及的内容都是完整了的,与客户端的联系还得等待接下来的更新才会联系得上。

第一点:程序只属于个人测试程序,带有调试信息,同时也还有很多的不完善,觉得不好的,请各位尽管拍砖。~~

下面说正题:

开发环境和工具:Ubuntu 12.04、 Qt4.7 、vi
使用语言:C/C++

详细设计过程:

第一步,要设计一个服务器端,首先要考虑的就是我们如何初始化我们自己的服务器,然后设置好本地的服务器之后,等待客户端的连接。
这里我采用的是linux下的socket编程,按照之前在博客中提到的七步,初始化和设置本地服务器。之后便是开始监听,然后等待客户端的链接。

第二步:当有客户端连接到服务器端之后,我们需要做的是把客户端的连接fd存储起来,然后开辟一个线程用于处理客户端的请求。
在这里我使用的是C++中的容器vector,我在程序中设置了一个全局的vector变量,用于存储客户端的连接到服务器分配给客户端的fd。以便我接下俩用于发送消息回客户端。

第三步:当客户端连接上后,我们需要做的便是开始处理线程,我们为没一个客户端的连接开辟了一个线程处理函数,处理客户端的连接。

第四步:我们开始线程后,就是处理客户端的信息了,这使用了简单的客户端和服务器的数据封装,以便我方便解析到底客户端发送过来的是命令信息还是聊天信息。这样我就可以知道客户端到底想干嘛,然后分别做不同的处理。

关于协议封装这一块,其实还有很多可以做,这里我只是简单的定义了一个头,区分命令和聊天信息而已,有兴趣的可以继续深入协议封装。想现在的zigbee这类的技术。很多都支持二次封装开发。

以下我会给出整个实现的代码,并且写有很多注释。具体要联系接下来的客户端代码一起看,才好。尽量在未来3天内更新。

采用Qt 实现简单的客户端

之前已经实现了基本的服务器端的架构,并且通过浏览器我们已经可以看见实时的视屏画面了,现在要做的是,把视屏画面显示在自己编写的一个客户端上面,而不是一直使用浏览器查看。
环境:acer 4752G ubuntu 12.04
工具:vi Qt 4.7

这里首先需要解决一个非常关键的问题:
当我们的服务器段,通过摄像头采集到了数据之后,我们把它经过编码之后形成的是一张一张的图片帧,然后发往浏览器,这时我们采用的http协议,发往浏览器,然后浏览器可以解析我们的http协议,去掉基本的数据封装的头部和尾部,但是现在我们使用的是自己编写的客户端,这样的话我们就必须得自己接写服务器端发来的数据,自己去除数据帧的帧头,以及我们在服务器端发出的一帧数据的开始和结尾除,自己删除多余的信息,然后去除相应的图片,绘制到我们的客户端截面。

当然,如果当当是为了实现一个自己写的客户端可以接收数据的话,我们完全可以自己定义协议,然后封装数据发往客户端,客户端做相应的解析即可。

这里呢,我测试的是使用http协议,

首先发送的是一个http头部 [HEADER]…..\r\n\r\n… \n\n..[data]\r\n
\n\n..[data]\r\n
\n\n..[data]\r\n
这是我们发出的每一针的数据的封装格式,
然后我们在解析的时候就是要
第一步:删除http报头
第二部:判断是否有一个数据结束的标记已经之后还附加的多余的数据 \r\n–
第三部:当等待有一帧完整的数据后,我们就从数据帧的结尾处开始取数据,区到开头,然后吧取到的数据发送给绘制函数。update()我们的屏幕。绘制完之后,删除现有的数据,准备接收下一帧的数据

解析过程是最终要的。!!

一下是完整的实现代码:

接下来是具体的实现每个函数和信号之间的关联

提醒一点,资源文件自己去找,然后项目文件什么的,记得加network模块,否则编译会报错。

以上便是初学测试的代码。话说有点坑跌,。将就下吧。觉得不好的就请猛拍砖就好。

利用V4L2架构实现简单的视频监控

看看博客,忽然发现很久不更新文章了,最近都在忙着找工作什么的,现在又是感冒发烧,难过得很!
刚好今天实现了基本的客户端,就简单的说一下关于整个实现过程吧,废话不过多说~~

测试环境:acer 4752G ubuntu 12.04
工具:vi Qt4.7

首先要做一个视频监控,第一步就是要有一个摄像头(这是硬条件,没摄像头做个JB对吧),这里采用的是笔记本的自带摄像头。当然其它的也可以,不过要查寻一下基本的驱动架构和支持的图片格式。有的是jpeg的图片格式的,有的是yuyv的图片格式。确保摄像头是好的之后,接下来就是利用vi写一个服务器了,服务器主要工作就是等待客户端的链接,然后负责调度摄像头采集图片,不断的发往客户端就行了~~
以下是我测试用的代码,略微有点乱,注释什么的和打印信息测试什么的都没删掉,讲究用下吧。不想弄它了。。。以下是完整的代码实现。服务器采用系统编程这一块实现~~

这里是图片的haffman编码之类的东西,我也不怎么懂,网上找的。

接下来就是具体的关于摄像头那一块的实现,查询出基本的摄像头格式,然后相应的设置摄像头,实现数据的采集

实现了基本的摄像头这边的硬件初始化配置之后,接下来就是网络这一块,这里需要注意的一是:在我们建立服务器的时候,大概有以下几个步骤:
1、构架socket结构体
2、构件表达服务器的地址结构体
3、像地址结构体设置数据,初始化
4、绑定地址结构体和socket描述符
5、监听客户端的链接
6、准备接收客户端的信息服务
7、启动服务线程,回应请求数据服务,分离线程属性。

当写完以上这一块之后,便可以实现基本的服务器这边的架构了,这时我们可以通过浏览器来访问我们的服务器,通过http协议写我们的视屏流到我们的浏览器中,也就是基本的视频已经出来了。

很乱,看个大概就好,实在看不下去的就请拍砖。