转眼间大三开学已经三周了。现在在教室准备学习数据库,可是又有点累。 所幸就写点不费脑子的事情, 也当是对开学这段时间的总结。
东软项目的主要做的事: 在局域网内实现连个pc 机 的信息互传。 具体的则有 文件传输,表情,日历等功能。
首先,需要说明的是 学校要求使用C 语言。 当然,我们大多数人也是只会使用C 的。 只是这次需要用c 来开发一个小的软件。 以前听说用C 来写界面,其实真的一直以来是不能理解的, 不知道一个黑框,怎么可能写的出 界面呢? 当然,经过一天的学习,自己已经知道了这其中究竟是怎么回事。
前人在这方面根本就没有讲这其中究竟是怎么回事,自己傻傻的怀着这个疑惑两年。 在现在看来,自己真实蠢死了。 写界面,其实只是借助另一个语言,GTK(或者qt),他们可以可以和C 混用。 使用这些原因写好界面,用C 的函数嵌套进去就可以实现一些基本的功能。
当然,C 的函数,自己在以前的两年时间根本没有学习到他的博大精深。 借助学长的一些代码,还有网上的例子,才算是稍微的知道了一些c 本身提供的一些函数,真是方便的很。
好了,以上其实都是废话,因为自己完全不知道这篇文章的结构怎么写。 所以扯了一大堆。写这篇文章的另一个目的,也是希望有人在做这个类似的项目的时候,不要被表面吓到 ,其实里面都很简单,自己在这里写上整个项目的轮廓(团队合作,而我参与了整个项目的所有部分),不至于有的人不知道从哪里下手。 现在开始正文。
首先,实现局域网内的信息传输,上课听讲,老师其实就说了一句话,socket 。 自己其实在以前也是用过一点它 ,但是当时只是狐假虎威罢了,这次算是真正的学习了一点。
通过在网上的学习,很简单的,其实就可以写一个在自己电脑上本地(127.0.0.1)的socket 链接。 当然,前提是操作系统的环境是 Linux(Ubuntu)【其他的没有测试过,不敢妄说】。
以上其实就已经完成了整个项目的理论支持。 整个项目脱离了 socket,就什么也做不了。
其实一个人做的话在衔接方面可能会好一点,但是,如果自己是新手,第一次做这种小的项目,还是十分的考验团队之间的协作能力。 一个人真的很累。 下来以团队的视角讲述整个项目。
整个项目分为以下功能模块:
1、与用户交互的界面
2、用户数据的存储(注册信息,登录信息,聊天信息等)
3、信息互传
上面的三个只是最简单的三个大的分类,其实在细分,还是有很多,界面就不用说了,很简单,关于用户数据的存储,牵扯到 : 数据库的安装,服务端(对应的还有一个客户端)与数据库建立连接,对于数据库信息选择操作等。 当然,这些信息就很自然的牵扯到 信息的互传(socket)。
以上就大概的说了整个项目的内容,下面说一下自己认为做这个项目应该的流程。 团队为例。
我们组当时最后功能的实现,具体的模块分布是这样的:
客户端是用户输入信息的。 首先在运行的时候,和 服务器建立 socket 连接, 服务器 和数据库建立连接。 用户提交数据,通过socket 传送给 服务器,服务器 将数据暂时存储,从数据库中调取信息,进行匹配,回传等。 然后客户端接受服务器的信息,进行下一步的操作,显示, 后面的事情大致上都是这样的。
首先,要有一个人来写界面,或者是画界面(glade【gtk】,或者是qt里面的design),界面的事情比较简单,稍微难一点的是 里面的 滚动条,双击,树形图之类的。 这些需要好哈的研读别人的代码。就我而言,半吊子水平。 期间出了很多的玄学错误。 【当然是自己没有学到家了】
然后其余人员就要定好函数名称了。 用户是通过界面进行操作的。 界面里面有很多触发点,要在这个项目的过程中有(如果怎行,那么怎样)这样的思想,如此编写程序就会有点感觉了。
首先,从刚开始,界面的设计上,由用户的信息输入, 肯定有一个按钮,那么会点击,如果点击了,那么就要触发一个函数,这个函数做什么,类似的其他情况,项目组成员在一起要好好的把整个过程模拟一遍,然后根据组内人的能力等,将功能细分,这里有一个点需要注意,函数的名称一定要再组内共享,那个函数,是什么功能,用在什么地方。 那些变量是全局的,要谨慎使用。
下面的事情就是整个项目最难的地方,怎么使两边井然有序的进行信息的互传,不会出现信息传输混乱。这就开始挑战团队对于整个软件的运行过程的模拟。 刚开始,用户可能登陆,可能注册,,可能其他的选项,那么是否应该在用户点击一个按钮,触发一个事件后,服务器这边能够接受用户的目的,那么很明显,需要一个变量来专门的记录用户的目的。
这样,在服务器这边,遇到这个情况,进入这个函数,如果是那个情况,就进入另一个函数。 这样,在整体上,不会出现大面积的混乱。 调整bug也是比较容易的。
利用这个思想解决了这个问题后,我们已经实现了根本上的数据的传输,后面的事情在我看来无非是对于数据进行操作。 这里牵扯到服务器与数据库进行连接(服务器和数据库连接好一点),这个在网上也是有比较成熟的现成的代码。
在后面,无非是怎么把信息显示在聊天框中,这些都是本地的事情了,网上搜一搜就可以了。
当然,最后还有一件事情就是,界面的好坏直接影响整个观看的效果,一定要好好的查一查别人的代码,看一看别人的骚操作。
对了,还有一个文件的传输,我的思路是在 另开一个线程,不然会在传输文件的过程中影响聊天,尤其是传输大文件的时候。
还有,如果有时间把用户密码哈希存储起来,是一个亮点,只是自己当时没有时间做。 至今还是一个遗憾,虽然没有什么技术,但是这个思想十分的重要。
以上就是自己可以想到的事情了。