设计一个网络即时通信的进程(一)

类别:.NET开发 点击:0 评论:0 推荐:

用了几年的QQ,突然自己也想做一个类似的聊天工具,于是便有了设计一个网络即时通讯工具的想法。在这里写点最初的想法,供自己和他人参考。我绝对算不上什么权威,但能写些实用的东西,供大家分享,也是种乐事。希望所有读过本文章的人,能让我知道你们的想法,帮助我提高。

 

关于即时通讯软件的一些最初认识

 

一、通信协议的选择

首先来分析一下进行网络通信应选择的通信协议吧。目前,用于数据传输的协议可供我们选择的有两个:TCP协议和UDP协议。

二者的优缺点如下:

TCP协议:面向连接的传输协议,在传输数据时在传数双方建立起一个稳定的链接。适用于在不可靠的网络环境中尽可能安全的传输数据。TCP被设计成能动态满足互联网的要求,并且足以健壮能对面对多种出错。不足之处就在于建立边接需要时间长,并可能由于偶然丢失的数据包而使整个传输延迟或中断。

UDP协议:UPD(user data protocol)。称为无连接的传输协议。UDP为应用程序提供了一种发送封装的原始IP数据报的方法同,并且发送时无需建立连接。这样根本不需要建立连接的时间。很多有一个请求和一个响应的客户-服务器应用程序采用UDP,这样可以避免建立和释放连接的麻烦。

综合来看,本聊天软件的务种功能中,需要用的网络协议的环节总共以下几个:

l         收发信息

l         发送视频和音频直播

l         发送文件

在收发信息时,发送方直接发送一个UDP的数据包,而接收方不停的侦听是否有UDP数据包。这样很方便。而在传送视频和音频信息的时候,对传输速度有很高的要求;但是在快速的多媒体流的方式下观看和收听节目时,偶尔缺少一帧或几帧的数据,并不会被观众察觉,因此,在传送视频和音频节目时,最好也采用UDP协议。而在发送文件时,对文件传输的质量则有相当高的要求,不允许因网络传输原因或其它原因而缺少任何的数据,这时就需要我们建立一个尽可能稳定的传输方式,那么只能选择TCP协议了。

 

二、数据库和语言的选择

先来看数据库,我们所需要的是一个非常安全并且可复用性和可扩展性较好的数据库服务。为此我们先来选择一种数据库服务器,在这里我选择Microsoft SQL Server 2000。今后,所有的数据服务就都将使用到它了。当然这种选择仅仅为作者本人的喜好,也可以采用目前较为流行的其它几种数据服务器,如Oracle, mySQL等。

 

就使用语言来看,现在我们手中可选择的有:MFC, C#, VB, Java Delphi。至于选择哪个,可以从不同的需要和个人的喜好而定。如果想做大型的企业开发,自然用MFC更好一些,因为由它生成的程序执行较率高,性能稳定。并容易制作成统一的安装文件,有利于商业出版和发布。而C#同Java在发行方面就不那么容易了,因为他们都需要在客户机上预装一个运行环境,这成为了用这两种语言编写的程序推广中最大的困难。但他们又比MFC易于掌握,使用也更加的方便,所以比较适合个人研究式的开发。最终,我选用了C#。因为在制做这个程序前,对C#一无所知,我也很想通过研究设计这个软件,来学习一步步的C#。

 

三、本软件的功能列表

下面是我对这个软件所有功能的最初设想。

l         注册用户

l         用户登陆

l         修改用户信息

l         修改密码

l         添加好友

l         删除好友

l         发送/接收信息

 

接下来,我将分部阐述每项功能的实现设想,而具体实现上的细节,将在以后的文章中说明。

注册用户:此项功能将完成注册一个新帐户的工作。因为所有的帐户信息均存放在一个数据表中,因为完成此项任务只需要完成一条对数据库的插入命令。

用户登陆:到数据库服务器中验证用户名和密码是否匹配,如果匹配将用户名传递给下一个页面去处理,如果不匹配则提示错误,要求重新输入。

修改用户信息:完成一个数据库修改工作。要求给出用户名和密码,在验证通过后,才可修改数据。

修改密码:在修改前先要求输入用户名和原用户密码。验证后方可修改。

添加好友:在这里先不讨论发送用户请求的问题,我们只考虑最理想的状态,即:添加了好友,则好友直接被添加到好友列表中,同时,此用户也被加入的好友的好友列表中。

删除好友:在这里也不讨论较复杂的情况,只是考虑最理想的情况,也就是删除自己的好友时,好友从自己的列表中消失,同时,自己自动从对方的好友列表中删除。

发送/接收消息:由于系统在侦听UDP数据包时,处于阻塞状态,因此必须把侦听数据处理成一个单独的线程,否则将无法在侦听UDP的同时,做其它任何事情了。发送消息时,我们应该分成两种情况,第一种情况是对方在线,此时,只需要向对方的IP和指定端口上发送一个包含消息的数据包即可。第二种情况是对方不在线,这里我们需要将消息保存在服务器端,待对方上线时,统一下载到对方的客户端。而接收消息相对简单,只要单独开一个线程,循环侦听网络即可。

 

以上,就是我对将要开发的软件的一些分析和认识,现在还很不全面,不过随着认识的深入和工程的进展,它将得到进一步的完善。

 

参考文献:

计算机网络 第三版 Andrew S. Tanenbaum著 北京.清华大学出版社

 

 

本文地址:http://com.8s8s.com/it/it43009.htm