基于socket的即时通信系统设计与实现(编辑修改稿)内容摘要:

众多客户的请求 [7]。 C/S通信主要特点是客户端之间的通信都要通过服务器的转发,会造成服务太 集中,在 C/S模型中,当网络增大时,服务器的压力就越大。 当增加一个客户,服务器的性能就会弱化,甚至会而使服务器失效而导致整个网络的瘫痪等,其优点是便于集中管理,像这种结构一般用在用户数量少的局域网内。 C/S模型图如图。 理工大学 学士学位论文 7 图 C/S 模型图 即时通信主流的通信协议 传输控制协议 TCP和用户数据报 UDP是 TCP/IP协议族的两个主要的传输协议,这两个协议都使用 IP作为网络层协议 [8]。 在网络通信传输机制中, TCP是属于 “面向连接,可靠传输 ”的类型,面向连接的传输意味着在进行通信以前 ,需要在两个系统之间建立逻辑连接,在每个数据传输的过程中都需要进行应答以保证数据包的完整。 这种方法需要的网络开销较大,但却提供一种可靠的传输层服务。 UDP是属于 “面向无连接,不可靠传输 ”的类型,该协议只负责接收和传送上层协议传递的消息, UDP本身不做任何检测、修改与应答,上层协议需要自己处理这些事务。 TCP、 UDP最大的区别在于为应用协议提供不同的服务。 UDP 协议 用户数据报协议 UDP是建立在网际协议之上的,提供面向无连接、不可靠的数据报传输服务的传输协议 [9]。 UDP传输不像 TCP传输一样需 要预先建立一条连接, UDP把数据发送出去但不进行差错控制和流量控制,报文可能丢失、重复或者失序,而发送方却得不到通知的,数据也不会被重传。 因此, UDP提供的是一种不可靠的应用数据传输服务。 它不需要通过一些握手协议确保连接的可靠性,发送方直接把数据广播到网络上,理工大学 学士学位论文 8 任何欲接收者都可接收到数据。 其优点在于: 1. 使用 UDP 时,每个数据中都给出了完整的地址信息,发送数据之前不需要建立发送方与接收方的连接,因此减少了开销和发送数据之前的时延。 2. 不使用拥塞控制,也不保证可靠传输,因此主机不需要维持具有许多参数的、复杂 的连接状态表。 3. UDP不进行流量控制,没有序列与确认、没有超时重发等机制,因此它处理和传输数据的速度快。 作为一种面向无连接的传输协议,基于 UDP的应用程序在高可靠性、地延迟的网络中运动的很好,但是在通信子网的服务质量相对很低下的 Inter上,它可能就无法运行了,因为数据报的丢失过于频繁。 原因就在于 UDP的不可靠性,而这些应用程序自身可能有没有提供可靠性保障。 因此,基于 UDP的应用程序如果想在可靠性低下的网络中运行的话,必须自己提供可靠性保障,例如遗失数据报重重传、失序的数据报重新组合等。 TCP 协议 TCP是一个面向连接的、可靠的传输层协议,协议提供的服务包括面向连接、双向、有序并且无重复的数据流传送、有效的流量控制、全双工操作和多路复用。 它主要的功能是提供大量数据的传输并确保其传输无误,并提供错误检查、数据复原以及数据超时重传等机制,适用于传输可靠性要求比较高的数据传输 [9]。 因此即时通信系统的消息传输一般是建立在 TCP协议基础之上的,客户与服务器之间都是通过 TCP传输数据,服务器端口一般固定。 由于 TCP是面向连接的,但是在国内目前 IP地址短缺,很多时候采用通过局域网连入 Inter的网络状况, TCP的对等连接显然不能满足所有的要求,而且目前由于黑客软件和病毒的泛滥,大部分上网的个人计算机都配置了防火墙在很大程度上阻止了许多的入站请求。 所以数据传输大都是先尝试直接连接,如果连接不通的话采用通过服务器中转的方式。 Socket 技术 随着 Inter 的迅猛发展,网络通信应用程序的开发成为一个研究热点。 Windows环境下进行通信程序设计的最基本方法是采用 Socket 技术实现 [10]。 应用程序调用 Socket的 API(应用程序编程接口 )实现相互之间的通信,又利用下层的理工大学 学士学位论文 9 网络 通信协议功能和操作系统调用实现实际的通信工作。 Socket工作原理如图 : 图 Socket 工作原理图 Sockets也称为套接字,是一种网络编程接口,它是通信端点的一种抽象,提供了一种发送和接收数据的机制。 用户目前可以使用两种类型的套接字,它们是流式套接字(Stream Sockets) 和数据报套接字 (Datagram Sockets),这两种套接字传输的数据类型是不同的,因而其使用方法和相应的程序设计模型也是不同的 [11]。 多线程技术 操作系统是一个多任务的系统,支持多任务调度和处理,基于该功能所提供的多任务空间,程序员可以完全控制应用程序中每一个片段的运行,从而编写高效率的应用程序。 所谓多任务通常包括这样两大类:单进程和多线程。 进程是指在系统中正在运行的一个应用程序,当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源 [13];而一个进程又是由多个线程所组成的,线程是程序中的一个执行流,线程是系统分配处理器时资源的基本单元,或者进程之内独立执行的一个单元,对于操作系统而言,其调 度单元是线程 [14]。 每个线程都有自己的专有寄存器,但代码区是共享的,即不同的线程可以执行同样的函数。 多线程是指,程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允应用程序 A 应用程序 B 网络接口,例如, Windows Socket 网络服务协议接口,例如 TCP/IP 操作系统,例如 Windows 物理通信介质 理工大学 学士学位论文 10 许单个程序创建多个并行执行的线程来完成各自的任务,也就是多进程。 多线程的应用可以大大地提高 CPU的利用率,在多线程程序中,一个线程必须等待的时候, CPU可以运行其它的线程而不是等待。 在即时通信系统开发中,主要用多线程来解决多用户同时与服务器进行通信以及客户端同时与其它多个客户端通信的问题。 其基本设计思路是 :服务器端启动后,进入侦听模式,如果有客户端连接的信号收到,服务器就自己新建一个 Socket,然后新建一个线程用来和需要连接的客户端通信,同时,为了能够使 windows 窗口响应,还要发送事件给父窗口,接着自己继续侦听。 新建的线程执行完毕,自动关闭连接,释放资源。 这样,就实现了 Socket 的连接和多线程通信。 JDBC 技术 本系统采用的是客户 /服务器三层结构,即客户端、服务器以及数据库。 我们所用到的访问数据库的技术是 JDBC。 JDBC即活动的数据对象,是 Microsoft开发的用于访问数据库的。 其显著 特点是快速、简单。 JDBC(Java Data Base Connectivity, Java 数据库连接 )是一种用于执行 SQL 语句的Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。 JDBC 为数据库开发人员提供了一个标准的 API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序。 有了 JDBC,向各种关系数据发送 SQL语句就是一件很容易的事。 换言之,有了 JDBC API,就不必为访问 Sybase 数据库专门写一个程序,为 访问 Oracle 数据库又专门写一个程序,或为访问 Informix 数据库又编写另一个程序等等,程序员只需用 JDBC API 写一个程序就够了,它可向相应数据库发送 SQL 调用。 同时,将 Java 语言和 JDBC 结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是 Java 语言 “编写一次,处处运行 ”的优势。 Java数据库连接体系结构是用于 Java应用程序连接数据库的标准方法。 JDBC 对 Java程序员而言是 API,对实现与数据库连接的服务提供商而言是接口模型。 作为 API, JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。 JDBC 使用已有的 SQL 标准并支持与其它数据库连接标准。 JDBC 实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。 Java理工大学 学士学位论文 11 具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。 所需要的只是 Java 应用程序与各种不同数据库之间进行对话的方法。 而 JDBC 正是作为此种用途的机制。 JDBC 扩展了 Java 的功能。 Java 和 JDBC 的结合使信息传 播变得容易和经济。 企业可继续使用它们安装好的数据库,并能便捷地存取信息,即使这些信息是储存在不同数据库管理系统上。 新程序的开发期很短。 安装和版本控制将大为简化。 程序员可只编写一遍应用程序或只更新一次,然后将它放到服务器上,随后任何人就都可得到最新版本的应用程序 [15]。 简单地说, JDBC 可做三件事:与数据库建立连接、发送操作数据库的语句并处理结果。 开发工具介绍 在开发过程中主要用到 Eclipse、 MySQL 数据库和 Microsoft Office Visio 等工具,下面对这些开发工具做一下详细 介绍。 Eclipse 简介 Eclipse 最初由 OTI 和 IBM 两家公司的 IDE 产品开发组创建,起始于 1999 年 4 月。 IBM 提供了最初的 Eclipse 代码基础。 目前由 IBM 牵头,围绕着 Eclipse 项目已经发展成为了一个庞大的 Eclipse 联盟。 Eclipse 是一个开发源码项目,它其实是 Visual Age for Java 的替代品,其界面跟先前的 Visual Age for Java 差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注 [16]。 Eclipse 的本身只是一个框架平台,但是众多插件的支持使得 Eclipse 拥有其他功能相对固定的 IDE 软件很难具有的灵活性。 Eclipse 最初主要用来 Java 语言开发,但是目前也可以作为其他计算机语言比如 C++和 Python 的开发工具。 虽然大多数用户很乐于将 Eclipse 当作 IDE 来使用,但 Eclipse 的目标不仅限于此。 Eclipse 还包括插件开发环境,这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。 由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。 理工大学 学士学位论文 12 Eclipse 主要特点: 1.增加了 WindowBuilder ,一个流行的 Eclipse 开发 GUI 构建器,用户需要以安装插件的形式获得此功能。 2. Eclipse Market ,用户可以在线获取应用市场上种类繁多的 Eclipse 插件 (包括免费的和收费的 ),相比原来的 Install new software(现在仍然存在并可用 ),更加直接和便捷。 3. 使得它更容易创建领域特定语言。 4. 提供 Git 版本控制系统的紧密集成。 5.更好地与 Maven 整合,包括启动 Maven 的构建和维护 pom 文件。 6. Jubula 提供 Java 和 HTML 的自动化 GUI 测试功能。 MySQL 简介 MySQL是一个小型关系型数据库管理系统,开发者为瑞典 MySQL AB公司。 在 20xx年 1 月 16 号被 Sun 公司收购。 而 20xx 年, SUN 又被 Oracle 收购。 MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓 库内。 这样就增加了速度并提高了灵活性。 MySQL 的 SQL“结构化查询语言 ”。 SQL是用于访问数据库的最常用标准化语言。 MySQL 软件采用了 GPL(GNU 通用公共许可证 )。 由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库 [17]。 MySQL 数据库还有以下特点: 1.使用 C 和 C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。 2.支持 Linux、 Mac OS、 Solaris、 Windows 等多种操作系统。 3.为多种编程语言提供了 API。 这些编程语言包括 C、 C++、 Java、 PHP 等。 4.支持多线程,充分利用 CPU 资源。 5.优化的 SQL 查询算法,有效地提高查询速度。 6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的 GB 231 BIG5,日文的 Shift_JIS 等都可以用作数据表名和数据列名。 7.提供 TCP/IP、 ODBC 和 JDBC 等多种数据库连接途径。 8.提供用于管理、检查、优化数据 库操作的管理工具。 理工大学 学士学位论文 13 9.可。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。