您好,欢迎来到百家汽车网。
搜索
您的当前位置:首页基于Socket网络聊天系统的设计与实现

基于Socket网络聊天系统的设计与实现

来源:百家汽车网
--

摘 要

随着Internet的飞速发展,网络聊天以其操作简单、方便快捷、私密性好等优点已经迅速发展成为最普遍的网络交流方式之一,越来越受到人们的青睐,丰富了人们的网上生活.开发并实现具有自身特色的网络聊天系统具有实际应用价值。

本网络聊天系统基于Java应用程序设计,以Client/Server为开发模式,以Eclipse为开发环境,以MySQL为后台数据库,利用JDBC连接数据库。系统主要包括服务器模块和客户端模块,服务器模块能够对客户端发来的用户信息进行匹配、读取和转发;客户端模块能够进行注册、登录、聊天和文件传输。系统不但实现了点到点的聊天,还利用Java提供的Socket类和多线程功能,在单个程序中同时运行多个不同进程,从而实现多点对多点的聊天。

总之,该聊天系统具有开放性,实时性,多话题交错等特点,方便了人们网上交流。

【关键词】网络聊天 服务器模块 客户端模块 Socket

ABSTRACT

--

--

With the rapid development of Internet, network chat with its simple operation, convenient and gond privacy has quickly become the most popular way of communication networks, more and more people like it, enrich people's online lives. Development and Realization of the network chat system with its own characteristics and has practical application value.

The Internet chat system is based on Java application, designed by Client / Server as the development of models, as Eclipse development environment, MySQL as the backend database, and using JDBC to connect database. The system includes server modules and client modules, server module can match users' data, read and forward the information which is sent by client; client module to regist, login, chat and file transfer. The system not only achieves peer-to—peer chat, but also use the Java provids Socket class and multi—threading capabilities, in a single program run different processes at the same time, in order to achieve multipoint chat。

In short, the chat system is open, real—time and multi—topic staggered features, easy for people to communicate online。

【Key words】Network Chat Client Module Server Module Socket

--

--

目 录

前 言.............................................................................................错误!未定义书签。 第一章 系统开发工具简介ﻩ错误!未定义书签。

第一节 客户机/服务器模型..................................................错误!未定义书签。 第二节 JAVA简介ﻩ错误!未定义书签。

第三节 Socket简介 ................................................................错误!未定义书签。 第四节 Eclipse简介ﻩ错误!未定义书签。 第五节 MySQL简介ﻩ错误!未定义书签。

本章小结..................................................................................错误!未定义书签。 第二章 系统分析ﻩ错误!未定义书签。

第一节 可行性分析ﻩ错误!未定义书签。

第二节 业务流分析................................................................错误!未定义书签。 第三节 需求分析ﻩ错误!未定义书签。

一、系统设计目标...........................................................错误!未定义书签。 二、系统功能需求ﻩ错误!未定义书签。

本章小结..................................................................................错误!未定义书签。 第三章 系统概要设计ﻩ错误!未定义书签。

第一节 系统总体描述ﻩ错误!未定义书签。 第二节 模块设计ﻩ错误!未定义书签。 第三节 数据库设计ﻩ错误!未定义书签。

一、 设计原则.................................................................错误!未定义书签。 二、 具体步骤.................................................................错误!未定义书签。 本章小结..................................................................................错误!未定义书签。 第四章 系统实现.........................................................................错误!未定义书签。

第一节 数据库模块实现ﻩ错误!未定义书签。

一、 数据流图...............................................................错误!未定义书签。 二、数据库的连接...........................................................错误!未定义书签。 第二节 注册模块实现..........................................................错误!未定义书签。 第三节 登录模块实现............................................................错误!未定义书签。 第四节 聊天模块实现............................................................错误!未定义书签。 第五节 文件传输模块实现....................................................错误!未定义书签。 本章小结ﻩ错误!未定义书签。

第五章 系统测试.........................................................................错误!未定义书签。

--

--

第一节 服务器模块测试......................................................错误!未定义书签。 第二节 注册模块测试............................................................错误!未定义书签。 第三节 登录模块测试..........................................................错误!未定义书签。 第四节 聊天模块测试ﻩ错误!未定义书签。

第五节 文件传输模块测试..................................................错误!未定义书签。 本章小结..................................................................................错误!未定义书签。 总 结ﻩ错误!未定义书签。

致 谢.............................................................................................错误!未定义书签。 参考文献ﻩ错误!未定义书签。

附 录...........................................................................................错误!未定义书签。

一、英文原文ﻩ错误!未定义书签。

二、英文翻译..........................................................................错误!未定义书签。

--

--

前 言

随着互联网的快速发展,网络聊天软件以它的实时性、高效率和低成本的特质充当了信息交流的媒介,并逐渐成为网络商圈和生活商圈中不可或缺的组成部分[1]。网络聊天工具实现了“沟通无极限”,它打破了办公室里上级与下级直接的等级,也打破了长辈与晚辈之间的时间,也打破了异地之间的距离.同时人们对于网络聊天工具的友好的界面和快捷的操作方式也越来越高。

大家都知道,网络上最常用的交流工具是腾讯QQ,QQ来源于OICQ(open icq),ICQ是“I seek you”的简称,是“我找你\"的意思。QQ引用了ICQ的功能即即时通信,我们只要将对方加为好友,不管对方是否在线,我们都可以向对方发送信息,无论对方在哪里,只要登陆QQ,他就能够看到我们给他发的信息,我们就能够随时随地的和对方进行信息交流[2]。

随着网络聊天工具的不断完善,它的功能越来越多样化,由最初的文字交流发展成现在的视频、语音交流,同时也提供了文件的发送和共享功能.其中不难发现,现在的网络聊天已经不再是一个简单的沟通工具,而是一个信息资讯、交流互动、娱乐的工具.随着技术的发展,网络聊天工具具有即时性、高效性、安全性、功能上较强的延展性,能够提供方便、快捷的交流[3][4]。

本系统主要分析了网络聊天系统应该具备的功能、运行方式和实现方式,开发出一个基于Socket的网络聊天工具。该系统主要实现功能包括:注册、登录、聊天和文件的传输。

--

--

ﻬ第一章 系统开发工具简介

第一节 客户机/服务器模型

一、C/S结构简介

客户机/服务器模型,又称为Client/Server模型,简称C/S架构[5]。C/S计算技术在信息产业中占有重要的地位。

它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。客户端的任务是将用户的要求提交给服务器程序,再将服务器程序返回的结果以特定的形式显示给用户。服务器程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。

二、C/S特点

C/S是客户端/服务器,一般适合于软件开发,对客户端的计算机配置要求比较高,客户端也需要安装软件,比如QQ。C/S架构软件的特点如下:

应用服务器运行数据负荷较轻。C/S体系结构由客户应用程序和数据库服务程序组成,二者分别称为前台程序和后台程序。一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序当需要对数据库中的数据进行任何操作时,客户程序就会自动寻找服务器程序,并向其发出请求,服务器程序根据规程做出响应,返回结果,应用服务器运行数据负荷较轻。

数据的储存管理功能较为透明.在数据库应用中数据的储存管理功能是由服务器程序和客户应用程序分别进行的。前台应用可以违反的规则,并且通常把那些不同的运行数据,在服务器程序中不集中实现.因此对于工作在前台程序上的最终用户是“透明”的,他们无须干涉背后的过程就可以完成自己的一切工作。在C/S提醒体系下,数据库不能真正成为公共、专业化的仓库,它受到的专门管理。

--

--

第二节 JAVA简介

Java是由SunMicrosystems公司于1995年5月推出的java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、internet计算.从此Java被广泛接受并推动力web的迅速发展,常用的浏览器均支持Java applet。

Java平台由Java虚拟机(Java Virtual Machine)和Java应用编程接口(Application Programming Interface,简称API)构成.Java应用在编程接口为Java应用提供了一个于操作系统的标准接口,可分为基本部分和扩展部分.在硬件和操作系统平台上安装一个Java平台之后,Java应用程序就可运行。Java应用编程接口已经从1.1X版本发展到1.2版.目前常用的Java平台基于Java1.4,最近版本为Java1.7。

Java分为三个体系J2SE(Java2 Standard Edition),J2EE(Java 2 Platform enterprise Edition),J2ME(Java 2 Micro Edition)。

Java是一种具有简单性(Java语法是C++语法的一个“纯净”版本)、面向对象(面向对象是一种程序设计技术,它将重点放在数据和对象的接口上)、网络技能(Java有一个扩展的例程库,用于处理HTTP和FTP这类的TCP/IP协议)、健壮性、安全性(Java可以构建防病毒、防篡改的系统)、体系结构中立、可移植性、解释型、高性能、多线程的动态语言[6]。

Java的I/O建立于流(stream)之上。输入流读取数据;输出流写入数据。不同的流类如java.io。FileInputStream和sun.net.TeletOutputStream读写某一种数据源。但是所有输入流都有相同的基本方法,所有输入流也使用相同基本方法来读取数据[7]。

Java中的数据流类型有两种:

输出流(OutputStream):输出流数据流经数据从程序送到数据接收者,如可以向显示器屏幕或者文件传输数据。输出流只能写不能读。

输入流(InputStream):程序从外部设备写数据时,使用输入流。输入流将数据从数据源传递给程序,可以从键盘或者文件中获得数据。输入流只能读不能写。

--

--

第三节 Socket简介

Socket通常被称为“套接字”,用于描述IP地址和端口[8]。Socket是建立在传输层协议(主要是TCP和UDP)上的一种套接字规范[9],Socket接口是TCP/IP网络的API.在网络通信中,如果两台计算机之间是靠一个“通道”通信,那么这个“通道”的两端就是套接字。

Socket是传输层提供的网络进程通信接口,相当于我们现在所用的“插座”,是进程之间通信的抽象连接点。在日常生活中,我们常见到信号插座、电话插座、接收/发送信号(或能量)的插座。Socket就相当于在电话线和电话机之间安放的插座。在网络上,两个程序是靠一个双向链路进行通信,这个双向链路的每一端就成为一个Socket.

进程之间通信,首先要需要建立一个自己的Socket,每个Socket都能进行读/写操作,进行读写操作时就会用到Socket中的输入/输出流[10]。

客户端建立Socket对象步骤:

1、调用 Socket()创建一个流套接字,并连接到服务器端;

Socket s=new Socket(InetAddress.getByName(“服务器的主机名”),port);

2、调用 Socket 类的 getOutputStream()和 getInputStream 获取输出流和输入流,开始网络数据的发送和接收。

OutputStream os=s。getOutputStream(); InputStream is=s。getInputStream(); byte[] buf=new byte[100];

int len=is.read(buf);//从服务器端读取数据 System.out。println(new String(buf,0,len));

os。write("Hello,this is client”。getBytes());//向服务器端输入数据

3、最后关闭通信套接字。 os。close();is。close();s。close(); 服务器端建立Socket步骤:

1、创建一个服务器端套接字,并绑定到指定端口上; ServerSocket ss=new ServerSocket(int port),

2、调用 accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。

Socket s=ss.accept();

3、调用 Socket 类的 getOutputStream()和 getInputStream

--

--

获取输出流和输入流,开始网络数据的发送和接收。

OutputStream os=s。getOutputStream(); InputStream is=s.getInputStream();

os。write(”Hello,this is server! ”。getBytes());//向客户端发送数据

byte[] buf=new byte[100];

int len=is。read(buf);//从客户端读取数据 System.out.println(new String(buf,0,len));

4、最后关闭通信套接字。 os.close(); is.close(); s。close();

建立连接后,客户端可以发出向Socket写数据的请求,服务器端则会对这个请求进行处理,并将处理结果通过Socket返回。服务器端则会对客户端进行监听,当监听到客户端有连接请求时,客户端就会与服务器端建立一个通信连接。同时,客户端被分配一个与Socket连接的本地端口号,服务器也会获取一个本地端口号。

Socket之通信主要使用TCP和UDP两种协议,UDP和TCP套接字用于传输延迟敏感的,但耐错误的数据流,例如多媒体流的应用程序产生的数据,适不适合的[11]。面向连接的套接字使用的是TCP协议,该协议可以保证数据的可靠传输;无连接的套接字通信使用的是UDP协议,该协议不能保证数据的可靠传输和连接的有效性。

1、使用TCP协议

进行通信必须完成以下过程,如图1.1所示.

客户端

通过Connect方法连接到指定的服务器; 通过write方法向服务器发送服务请求; 通过read从服务端接收数据。

服务器端

使用Bind方法绑定所指定的端口使Socket与一个本地端口相联; 使用 Listen方法监听该端口上的请求;

当监听到用户端发出的连接请求时,调用Accept完成连接的操作; 处理客户端请求后,使用write方法将数据返回给客户端; 建立新的Socket以处理传入的连接请求。

2、使用UDP

通信必须完成以下过程,如图1。2所示。

--

--

客户端

通过Connect方法连接到指定的服务器; 通过write方法向服务器发送服务请求; 通过read从服务端接收数据;

服务器端

使用Bind方法绑定所指定的端口使Socket与一个本地端口相联; 使用 Listen方法监听该端口上的请求;

当监听到用户端发出的连接请求时,服务器端处理连接请求;

使用write将结果返回到客户端。

Socket()服务器Socket()建立连接Connect()Blind()Read()服务请求Write()Listen()处理服务请求Accept()Write()响应服务Read()阻塞,等待客户请求连接Close()Close()

图1.1 面向连接的客户机/服务器交互过程

--

--

客户服务器Socket()Socket()Connect()Blind()Listen()阻塞,等待客户请求连接服务请求Write()处理服务请求服务应答Write()Read() 图1。2 面向无连接的客户机/服务器交互过程

第四节 Eclipse简介

Eclipse是一个开放源代码、基于Java的可扩展的开发平台。其实它只是一个框架和一组服务,用于通过插件组成构建开发环境。Eclipse附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK).

Eclipse还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要是针对希望把Eclipse扩展的软件开发人员,因为它允许构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是

--

--

插件,对于给Eclipse提供插件,以及用户提供一致和同意的环境而已,所有工具开发人员都具有同等的发挥场所。

Eclipse的本身只是一个框架平台,但是由于很多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。Eclipse是一个开放源码项目,由于开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们的关注。

第五节 MySQL简介

MySQL是目前最为流行的开放源码的数据库管理系统(DBMS),是完全网络化的跨平台的关系型数据库系统,它是由瑞典的MySQL AB公司开发、

[13]

发布并支持的.它被广泛的应用在Internet上的大型网站开放中[12]。

MySQL最初的开发出发点是使用MySQL来连接用户的表,这类表采用了快速低层面(ISAM)子程序。然而,经过一些测试后,发现MySQL的速度或灵活性不能满足用户的需求。所以为用户的数据库提供新的SQL接口,但API接口与MySQL的几乎一样。MySQL一直专注于速度、可靠性、扩展性和易用性,而且在发展过程中,不断引入了一些企业级特性,包括复制、全文搜索、事件、外键完整性、行级锁定等.同时在MySQL5中,还进一步引入视图、存储过程、触发器等高级特性,使得MySQL能进一步满足企业级应用的需要。

MySQL具有如下的优势: 1、速度:MySQL的运行速度很快.

2、价格:MySQL对很多个人使用来说是免费的.

3、容易使用:与其他大型数据库的设置和管理相比,其复杂程度低,容易学习. 4、可移植性:能够在很多不同的系统平台上工作,如Windows、Linux、Unix、Mac OS等。

5、丰富的接口:MySQL提供了用于C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等语言的API.

6、支持查询语言:MySQL可以利用标准SQL语法和支持ODBC(开放式数据库连接)的应用程序。

7、安全性和连接性:十分灵活和安全的权限和密码系统,允许基于主机的验

证。连接到服务器时,所有的密码传输均采用加密形式,从而保证了密码安全。

--

--

并且由于MySQL是网络化的,因此可以在因特网上的任何地方访问,提供数据共享的效率。

本章小结

本章主要介绍了开发网络聊天系统所使用到的工具,介绍了客户机/服务器模型、Java、Socket、Eclipse和MySQL.从使用的工具可以看出,该系统使用的c/s开发模型,使用JDK+Eclipse作为开发技术平台,以MySQL作为数据库,使用Socket作为理论基础。这些工具对于该系统来说必不可少。

--

--

第二章 系统分析

第一节 可行性分析

可行性分析(Feasibility Analysis)也称为可行性研究。它是以系统调查为基础,针对开发新系统是否具有必要性和可能性,对新系统的开发从技术、经济、社会的方面进行分析和研究,从而避免投资失误,保证新系统成功开发。可行性研究是为了用最小的代价在尽可能短的时间内确定问题能否解决.可行性分析包括以下几个方面的内容.

经济可行性:从经济可行性角度出发,在开发系统的过程中,必须要考虑如何节约开发成本,缩短开发周期,用最少的成本获取最大的回报。为了保证软件产品的质量,系统的开发周期一般都是在一个月左右,并且要保证有充裕的时间进行调研和测试。

本系统开发经费对于企业来说经济上是可以接受的,开发该网络通信系统所需的软件环境(Eclipse开发工具和数据库MySQL)和所需的硬件环境(计算机及其相关硬件),在市场上都很容易买到而且很便宜,或者也可以在相关网站上进行免费下载。开发该系统成本就要集中在系统的开发和维护上,对用户不会造成经济负担.而且当系统投入使用后,企业内部交流工具也可以使用该系统,一方面保证了内部信息的安全,一方面也充分利用了网络资源。所获得的效益将远远超过系统开发的成本,所以在经济方面是可行的.

技术可行性:该系统使用的开发语言是Java,由于Java语言具有跨平台性,所以很多编程者都会选择它。经过多年的发展Java虚拟机已经具有很高的版本,在性能上也有了很大的提高,在API函数方面有了许多扩充和冗余的精简。

本系统采用C/S架构 。因为C/S具有一定的灵活性、通用性和易操作性等特点,是用户对来说是一个比较好的选择。目前这种架构在系统架构方面被广泛采用,在系统架构上已经积累了大量的经验,所以本系统在技术上是可行的。

社会可行性:随着计算机的发展和普及,以及互联网技术的发展,很多公司和企业都能够提供局域息服务。而网络聊天系统只需要用户的电脑进入局域网就能访问,不必购买其他任何昂贵设备,大大节约了资金。

无论从技术可行性、经济可行性还是社会可行性来说,系统的设计与实现都是可行的。

--

--

第二节 业务流分析

对系统的组织结构和功能分析时,可以将系统分为:网络聊天客户端、网络聊天服务器端和数据库三个部分。对系统的组织结构和功能进行分析时,需要以一个实际业务流程的角度将系统调查中有关该业务流程的资料都联系起来作为下一步的分析基础.业务流程分析可以帮助我们了解业务的具体处理过程,发现和处理系统的调查工作中的欠缺和错误,修改和删除原系统的不合理部分,在新系统基础上优化业务处理流程。图2.1为该系统的业务流程图,该系统的业务流程如下:

1、启动系统的服务器,客户端运行程序,出现登录界面。

2、点击注册,客户端向服务器端发出注册请求,若注册成功,回到登录界面。 3、用户点击登录,客户端向服务器端发出登录请求,服务器将用户信息与数据用户信息进行匹配,若匹配成功,用户进入功能界面;反之,则提示用户密码错误。

4、用户登录后,客户端向服务器发送处理某些事件的请求,如私聊、群聊、文件传输等。

5、服务器将信息准确转发到用户。

第三节 需求分析

软件需求说明能把软件功能和性能的总体概念描述为具体的软件,从而奠定软件开发基础。该过程将软件计划阶段所确定的软件范围逐步细化到可详细定义的程度并分析出各种不同的软件元素,然后为这些元素找到可行的解决方法。总的来说,是对软件计划阶段建立的软件工作范围的求精和细化。它回答了“系统该做什么\"的问题[14]。

一、系统设计目标

网络聊天系统主要对象是局域网内的用户,使用交流更简单。设计本系统的目标如下:

--

--

1、一台电脑上能够同时登录多个不同的用户。

2、用户注册。用户通过填写基本资料进行注册,用户基本信息被数据库保存。

3、用户登录。用户使用注册时的用户名和密码登录系统。

4、聊天。用户登录成功后,可以向单个或所有在线好友发送消息。 5、文件传输。用户之间除了能够使用文字交流外,还能共享文件。

二、系统功能需求

1、注册

用户首先要进行注册。用户在注册时需要填写用户名、密码等相关信息。系统将该用户名作为登录的账号。

2、登录

① 登录时用户用注册的用户名进行登录.

② 用户点击登录按钮,客户端将用户信息发送到服务器,服务器对用户信息进行验证,返回相应的验证结果。若验证成功,用户进入主界面;若验证失败,则返回错误信息,用户回到登录界面。

3、聊天

该系统只能对在线好友进行聊天.聊天可以分为私聊和群聊. ① 私聊:私聊就是两人之间的聊天,及一对一的聊天。 ② 群聊:群聊就是多人之间的聊天,及一对一的聊天。

4、文件传输

该系统文件传输可以分为发送文件和接收文件。

① 发送文件:用户通过本系统将本地文件发送给在线好友。

② 接收文件:用户接收好友分享的文件,并将文件保存在本地。

--

--

运行程序登录界面错误信息报告用户注册输入用户名和密码数据库匹配登录密码错误功能界面功能处理

图2。1 系统业务流程图

本章小结

本章主要对网络聊天系统的可行性、业务流和需求进行了分析.在需求分析中,分析了该系统的设计目标和功能需求,该系统的主要功能包括注册、登录、聊天和文件传输。

--

--

ﻬ第三章 系统概要设计

第一节 系统总体描述

能够说明系统软件功能组成模块的就是系统体系结构,其中包括具体有哪些模块,系统由哪些功能以及结构组成。图3.1是本系统的体系结构图:

系统结构模块客户端服务器端注册模块登录模块聊天模块文件传输模块控制模块

图3.1 系统体系结构图

本系统总的来说包括两个部分:服务器端和客户端。在服务器端主要是服务器控制模块,接收客户端发来的连接请求,根据客户端的要求将信息准确的转发到客户端。客户端主要包括四个模块,用户在第一次进入系统时,必须首先进行注册,服务器将用户注册的信息存入数据库,以便用户再次进入系统时不再注册;用户注册后就可以直接点击登录,登录时客户端将用户填写的信息发送到服务器,服务器将用户信息与数据中的信息进行匹配,若用户未登录且信息存在,就返回登录成功;用户登录成功后就进入到主界面,用户可以看到在线好友,点击单个用户就可以进行私聊,点击所有人选项就可以群聊。

--

--

第二节 模块设计

一、注册模块设计

连接服务器以后,用户填写注册用户名、密码和性别,然后客户端向服务器端发送用户注册的基本信息,服务器接收到信息后,服务器将用户信息存储在数据库,并提醒用户注册成功。若用户注册失败,则返回用户注册失败。

二、登录模块设计

1、用户注册后,直接点击登录按钮,就可以直接进入主界面。若用户之前已经注册,那么登录时,用户需要填写用户名、密码和性别。

2、用户填写资料后,点击登录按钮.客户端向服务器发送登录请求。登录时,如用户点击退出按钮,则用户将退出登录系统;若不退出,服务器接收到客户端发送的登录请求后,将用户信息与数据库中存储的用户信息进行匹配。

3、服务器异常,若连接服务器失败,则显示错误,系统将停留在登录界面。 4、若通过验证,返回用户信息,同时向用户显示在线好友信息。

三、聊天模块设计

1、用户登录成功后,就进入到聊天页面。用户在用户列表中可以看到在线用户。

2、若用户需要进行私聊,则用户可以在用户列表中双击需要聊天的好友,然后必须勾选私聊框.

3、若用户私聊,还可以在界面下方的组合框中选择好友,也必须勾选私聊框。

4、若用户需要进行群聊,可以好友列表中选择所有人,或者在界面下方的组合框中选择所有人,不需要勾选私聊框.

5、在信息输入框中输入需要发送的信息,点击发送信息按钮,就可以发出信息.

6、用户在自己的聊天框中可以看到之前发送的信息以及发送对象。

四、文件传输模块

1、用户点击打开文件按钮,及可以弹出本地文件,用户可以在本地盘中选择将要发送的文件.

2、选择好文件以后,点击打开,然后选择的文件就会出现在用户发送文件的

--

--

框中。

3、用户在点击发送之前,必须先将发送文件框中的文件选中. 4、用户选择文件的接收对象。

5、点击发送文件,文件就会被发送出去。 6、好友将会收到系统发出的文件接受提醒. 7、好友选中用户发来的文件,点击接收文件按钮。

8、点击接收文件按钮之后,将弹出一个保存文件框,好友就可以将文件保存在电脑的本地盘中。

9、在接收文件时,需要对文件进行命名,好友在命名时必须在自己加上文件的后缀名,否则会打开失败。

10、好友接收文件后,若文件发送完成,在用户这边将进行提醒,然后将文件发送框进行清空。

第三节 数据库设计

一、设计原则

数据库在设计过程中会遇到很多数据的问题,如数据的丢失,数据的不正确,不匹配的数据和不准确的信息。一个差的数据库设计通常是这些类型的问题根本原因[15].因此一个好的数据库就需要有一定的设计原则。

在数据库设计中,原始单据与实体之间可以是一对一、一对多、多对多的关系。主键与外键之间一般是一个实体既不能无主键也不能无外键,主键是实体的高度抽象,主键与外键的配对,表示实体之间的连接。在创建表时一定要注意表的原子性,即基本表中的字段是不能再分解;原始性,基本表中的记录是原始数据的记录;演绎行,基本表与代码表中的数据可以派生出所有的输出数据;稳定性,基础表的结构式相对稳定,表中的记录需要长期保存。

在设计过程中设计范式的要求[16]是:

1、第一范式(1NF):数据库中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

2、第二范式(2NF):要求数据库表中的每个实例或行必须可以被唯一区分。为实现区分,通常需要为表加上一个列,用来储存各个实例的唯一标识。

--

--

3、第三范式(3NF)要求数据库表中不包含已在其他表中已包含的非主关键字信息。

二、具体步骤

1、数据库需求分析

数据库在一个项目编写过程中起着非常重要的作用。数据库需求分析的步骤分为:调查机构情况、熟悉业务活动、明确用户需求、去顶系统边界、分析系统功能、分析系统数据和编写分析报告,其中与用户不断深入地进行交流,获得用户的实际需求是数据库设计中一个很重要的步骤。

2、数据字典

数据字典是系统中各类数据描述的集合,是进行详细的数据收集和数据分析所获得的主要成果。对于该系统,对应相应的功能,就可得出数据字典的主要部分。该系统的主要数据结构如表3.2。

表3.2 数据结构表 数据结构名 用户 含义说明 包含用户基本信息 组成部分 用户名、密码等 3、数据库概念结构设计

将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计。概念结构设计是整个数据库设计的关键。概念结构是各种数据模型的共同基础。描述概念模型的有力工具是实体-联系图(E—R图).

对于该聊天系统,由于对功能的要求不太复杂,所以其概念设计采用自顶向下地进行需求分析,和自底向上地设计概念结构.

该系统的实体有一个,即用户实体,其中实体图如下:

用户名密码用户 图3.3 用户实体图

在该系统中,由于一个用户可以与多个在线用户进行交流,所以用户与用户

--

--

之间的关系是多对多的关系,即m对n的联系,所以该网络系统的E-R图如下:

用户名密码用户名密码用户

m交流n用户 图3。4 系统的E-R图

4.、数据库逻辑结构设计

数据库概念设计所得的E—R模型是对用户需求的抽象表达方式,它于任何一种具体的数据模型,所以它不能为任何一个具体的DBMS支持。为了能够建立起最终的物理系统,需要将概念结构进一步转化为某一DBMS支持的数据模型,然后根据逻辑设计的准则、数据的语义约束、规范化理论等对数据模型进行适当的调整和优化,形成合理的全局逻辑结构,并设计出用户子模式。这就是数据库逻辑设计所要完成的任务。

对于该系统,可以将逻辑概念结构转换为一般的关系模型。该系统所涉及到的数据表有一张,用来存放用户信息。

表3.5userinfo(用户表)对应的实体是用户,用来存放用户信息,用户信息包括用户名和用户密码。

表3。5 userinfo

列名 username passwd

数据类型 varchar varchar 是否为空 否 否 备注 用户名 用户密码 本章小结

本章主要介绍了网络聊天系统的模块包括服务器模块和客户端模块,客户端模块主要包括注册、登录、聊天和文件传输四个模块.在模块设计中这些模块进行了具体介绍。还介绍了系统的数据库设计原则和步骤。

--

--

第四章 系统实现

第一节 数据库模块实现

一、数据流图

在对用户需求分析完成后,可以用数据流图用来描述数据在系统中流动和变换的过程,表达数据与处理过程中的关系。该系统的主要功能是用户登陆后与其他在线用户进行聊天,所以该系统的初步数据流图如下:

登录请求用户A注册信息注册登录发送信息聊天用户B 图4。1初步数据流图

用户A与用户B进行通信,若A没有用户名没有注册,则首先用户A先填写注册信息,然后点击注册,服务器返回注册成功信息。A点击登录,客户端向服务器发出登录请求,服务器处理请求之后,返回信息.用户A进入到聊天界面,在信息输入框中填写信息,选择用户B,点击发送信息,信息就可以发给用户B。

二、数据库的连接

用户在进行注册、登录时,服务器将与数据库建立连接。启动服务器后,服务器开放端口9999,接收客户端发来的信息。Java用Class.forName()方法来加载驱动,在MysqlDriver.java的getCon()方法中创建数据库的连接,同时返回该连接。其主要代码如下:

--

--

try {

ﻩﻩ Class.forName(”com。mysql.jdbc。Driver”);//加载JDBC驱动 ﻩ ﻩ ﻩ ﻩ ﻩ

} catch (ClassNotFoundException e) { ﻩSystem.out。println("加载驱动异常!。。。\"); }

try {

con=DriverManager.getConnection("jdbc:mysql://localhost/uﻩ} catch (SQLException e) { ﻩe.printStackTrace(); }

ﻩreturn con;

数据库加载成功后,用DriverManager的getConnection()方法实现数据库连接。

ﻩe.printStackTrace();

serinfo?user=root&password=123456\");//连接数据库 ﻩﻩ System.out。println(”获得连接异常!。。.\");

第二节 注册模块实现

一、功能描述

用户启动客户端以后,就会出现一个注册窗口,若用户是第一次使用本系统,则需要注册一个账号。用户填写信息以后,客户端向服务器发送用户注册的基本信息,服务器接收到用户信息以后,进行用户名匹配,若没有匹配到相同的用户名,服务器就将该用户的基本信息存储在数据库中,同时返回注册成功信息.该系统的注册流程如图4.2.

--

--

是填写用户名和密码是否注册成功否用户名是否存在是数据库匹配用户名或密码是否为空运行程序注册窗口注册

图4。2 注册流程图

二、主要实现代码:

当用户启动客户端,首先出现一个注册窗口。窗口上包括三个按钮:登录、注册、退出。若用户点击“退出”按钮,则将调用类Chat中的方法actionPerformed()使用if语句if(e.getSource==quit)来处理事件,采用System。exit(—1)关闭窗口,退出系统。若用户点击“注册\"按钮,客户端将用户信息发送到服务器端。服务器启动后,调用类FriendsThread对用户的注册请求进行监听,当客户端发来注册请求和用户信息之后,调用类DtatBases中的方法isuser()将用户名进行匹配,若没有在数据库中找到该用户名,String sql = ”insert into userinfo values('” + t[1]

+ \"’,'\" + t[2] + ”')”将用信息添加到数据库,同时返回注册成功给客户端。

dout.writeUTF(”regedit,”+jusername.getText()+\”+jpasswd。getText());

ﻩﻩﻩString s1 = din.readUTF(); ﻩ

ﻩif(s1.equals(\"成功注册\")) {

JOptionPane.showMessageDialog(null, s1); } else if(s1.equals(”该用户名已经被注册\")){ JOptionPane.showMessageDialog(null, s1);

ﻩﻩ ﻩﻩ

}else {

ﻩﻩJOptionPane。showMessageDialog(null, "注册

失败”);

--

--

第三节 登录模块实现

一、功能描述

用户进行注册后,在登录界面中输入用户名和密码以后,点击登按钮.客户端向服务器发送登录请求和好友基本信息,服务器将用户的信息与数据库中的信息进行匹配,若匹配成功,用户进入主界面;若匹配不成功,则返回到登录窗口系统的登录流程图如图4.3。

二、主要实现代码:

用户在注册以后,只需要填写用户名和密码,点击登录按钮。客户端向服务器发送登录请求,服务器调用类FriendsThread建立一个新的Socket,然后调用其中的run()方法,在run方法中调用DataBase。java中的ispasswd()对用户的用户名和密码进行匹配.

if (new DataBases().isuser(t[1])) { ﻩ ﻩ

if (new DataBases()。ispasswd(t[1], t[3])) { ﻩdout。writeUTF("成功登录”);

System.out。println(t[1]+”:进入了聊天系统\"); ﻩUserVo user = new UserVo(t[1], t[2], socket); new Remind().remindOne(socket);//显示所有在线用户

LoginUser.map.put(t[1], user);

new Remind()。remindAll(user);//提醒所有用户该用户已上线

当服务器匹配成功后,向客户端发送登录成功的信息。用户进入主界面后,同时提醒所有在线用户该用户上线。然后调用UserVo.java中的UseVo(String username,String sex, Socket Soc) 和Remind.java中的remindOne()和remindAll将用户信息显示在好友列表中,同时在用户自己的好友列表中显示当前在线用户,在其他用户的好友列表中,将该用户的信息显示出来。

--

--

是运行程序登录窗口填写用户名和密码是否为空否否是否匹配成功是进入功能界面数据库匹配 图4。3 登录流程图

第四节 聊天模块实现

一、功能描述

用户登录成功后将进入主界面,用户在主界面中将看到在线用户.该用户可以选择单个用户进行私聊,也可以与当前所有人进行群聊。用户在选择用户进行私聊时,可以在好友列表中选择用户,也可以在组合框中选择用户名,进行私聊必须勾选私聊框。

二、主要代码实现

用户在选择与在线用户私聊时,客户端调用MainFrame。java中的valueChanged()监听用户是都在好友列表中选择了用户 String s1 = s.substring(0, s。indexOf(”【”));

ﻩjc1.setSelectedItem(s1);//使组合框的好友也为选中的好友 当用户选择用户以后,组合框中的用户也变成被选择的用户。同时,用户进行私聊时必须勾选私聊框,调用该类中的itemStateChanged()来判断用户是否勾选了私聊框.用户在输入框中输入聊天消息,点击“发送消息”按钮之后,客户端就将聊天信息、信息发送者和信息接收者信息发送给服务器,

dout。writeUTF(\"info,\"+sendname+”,"+jla1。getText()+","+send1。getText());

ﻩﻩﻩﻩ

ﻩsend1。setText(”\")

--

--

发送给服务器以后,信息数据库就自动清空。服务器端接受到客户端发出的信息后,调用LoginUser.java寻找信息接收者的信息基本信息, user=LoginUser.map.get(sendname); ﻩ ﻩ

soc = user.getSoc();

dout。writeUTF(sendname+",\"+sayname+”,”+info) ﻩdout=new DataOutputStream(soc.getOutputStream());

服务器找到用户信息后,就将信息和信息发送者转发到该用户。该用户的用户频道中将显示消息内容、信息发送者和系统当前时间.同样在发送信息用户的用户频道中也将显示用户发送信息的内容、信息接收者和系统当前时间。

用户与所有用户群聊时,可以在好友列表中选择“所有人”或者在组合框中选择“所有人”项,其实现方法与私聊差不多,只是不需要勾选私聊框。在服务器端

if(sendname.equals(”。.。。.....所有人。....。...”)) { ﻩﻩﻩﻩfor(String s:LoginUser。map。keySet()) { ﻩ

ﻩﻩﻩﻩSystem.out.println(s);

soc = user.getSoc();

ﻩﻩﻩ ﻩuser = LoginUser。map。get(s); ﻩﻩ ﻩ

dout=new DataOutputStream(soc。getOutputStream()); ﻩﻩﻩﻩdout.writeUTF(\"all,\"+sayname+”,\"+info);

服务器在LoginUser.java中得到所有用户的信息,所有用户都将获得一个Socket,服务器将信息内容和信息发送者准确转发到每一个用户。在客户端,每个用户的主频道上显示信息发送者和信息内容。

第五节 文件传输模块实现

一、功能描述

用户在好友列表中选择发送文件的对象,点击“打开文件\"按钮,弹出一个文件选择框,用户可以选择本地文件作为传输文件。用户选择好文件后,就可以点击“发送文件”按钮,将文件发送出去,文件发送文件流程图如图4。4。文件接收者在文件接收框中选择文件,点击“文件接收”按钮,弹出文件保存对话框,用户选择文件保存路径,为文件命名,命名时加上文件的后缀名,文件接收完成

--

--

后,可以将文件打开,接收文件流程图如图4.5。

主界面打开文件选择文件打开选择好友发送文件 图4.4 发送文件流程图

主界面接收文件选择保存路径文件命名确定打开文件 图4.5 文件发送流程图

二、主要实现代码

用户点击“打开文件”按钮后,客户端调用MainFrame.java中的actionPerformed(),使用FileDialog f = new FileDialog(this);f.setVisible(true);弹出一个文件选择对话框,并将其设置为可见。用户选择文件后,在发送文件框中显示出文件的路径,用户点击“文件发送”按钮后,客户端将文件发送者、文件接受者和文件信息发送给服务器,然后调用MainFrame。java中的类sendfilethread中的run()。

dout.writeUTF(\"send,”+jla1.getText()+”,\"+jc1.getSelectedItem()+”,"+(String)jl2.getSelectedValue()); ﻩ ﻩ

filename = (String)jl2.getSelectedValue(); ﻩ

sendfilethread s = new sendfilethread();

ﻩﻩﻩs。start();

服务器端接受到客户端发来的信息,调用LoginUser。java找到文件接收者的基本信息。服务器获得用户的端口号和网络地址,然后将文件进行转发。 String ip=soc.getInetAddress()。getHostAddress() ;

ﻩdout.writeUTF("take,"+sendfromname+",\"+sendname+",”+sendfile);

当好友接收到接收文件的提示后,好友选中文件,点击“接收文件”按钮后,弹出一个对话框,好友可以选择文件的保存路径JFileChooser jfc = new JFileChooser();int result = jfc.showSaveDialog(MainFrame。this),然后启动线程accepfilethread()接收文件。

while((len=ddin。read())!=-1) {//若数据没有读取完,则执行该循环 ﻩ

ﻩﻩbo。write(len);//把缓冲区的数据写入

--

--

ﻩ ﻩ

bo。flush();//清空缓冲区中的数据 ﻩ}

bo.close(); fileon.close();

ﻩﻩﻩﻩJOptionPane.showMessageDialog(MainFrame.this, "文件接收完成”);

本章小结

本章主要介绍了网络聊天系统的具体实现,介绍了数据库、注册、登录、聊天和文件传输具体实现代码和流程图,深入介绍了系统的整体设计.

--

--

第五章 系统测试

第一节 服务器模块测试

用户进行注册和登录之前,必须先启动服务器,只有在服务器开启的情况下,才能保证用户的注册、登录等功能顺利实现。运行服务器程序后,将出现如图5.1所示的界面,用户点击“启动”按钮后,服务器将启动,等待用户的连接,如图5。2.

图5.1 初始界面

图5.2 启动服务器

--

--

第二节 注册模块测试

当用户运行客户端程序后,就会出现注册窗口,用户可以在该窗口中填写基本信息进行注册,如图5。3所示。

图5.3 注册初始界面

用户进行注册之前,必须先填写用户名、密码和选择性别,如图5。4所示。

图5.4 输入用户信息

用户将所有信息填写完成后,点击“注册”按钮,系统将出现“注册成功\"信息,如图5.5;若其中用户名或密码为填写,将出现错误提示,如图5.6。若改用名已经被注册,系统将提醒用户,如图5.7。

图5.5 注册成功

--

--

图5。6 错误提示

图5.7 用户名以被注册

第三节 登录模块测试

用户注册后,直接点击“登录”按钮,若用户已登录,系统将提示用户,如图5。8所示.若用户之前未登录,则用户登录将进入主界面,如图5.9。

图5。8 用户已登录

--

--

图5。9 用户登录成功

第四节 聊天模块测试

该模块提供了私聊和群聊功能,用户在好友列表中选则单个用户,则可进行私聊,如图5.10所示。

图5。10 选择单个好友

用户选择好友后,就可以在输入框中输入信息,如图5.11.点击“发送信息”按钮,输入的信息被发送出去,如图5.12.

图5.11 输入信息

--

--

图5.12 发送信息

用户在好友列表中选择“所有人”就可以进行群聊,如图5。13.

图5.13 选择群聊对象

用户在输入框中输入信息,点击“发送信息”按钮,就可以将信息发送给所有在线用户,如图5.14。

图5.14 发送群消息

第五节 文件传输模块测试

该模块提供了发送文件和接收文件功能。用户点击“打开文件\"按钮,弹出一个选择文件的对话框,用户可以在其中选择文件发送,如图5。15所示。用户在对话框中选中文件,文件名和文件路径将显示在发送文件框中,用户选择文件,点击“发送文件\"按钮,文件被发送出去,如图5.16。

--

--

图5。15 选择文件

图5.16 选中文件

用户接收文件时,先选中被接收的文件,然后点击“接收文件\"按钮,弹出保存文件对话框,用户可以将文件保存在本地,如图5。17。

图5.17 保存文件

--

--

本章小结

本章主要进行了对系统的测试,包括服务器模块、注册模块、登录模块、聊天模块、文件传输模块等五个模块的测试,并给出了实现结果,将每一个模块的实现步骤都以图的形式表现出来,使得结构更加明显.

--

--

--

--

附 录

一、英文原文

T/TCP: TCP for Transactions

T/TCP is an experimental extension for the TCP protocol。 It was designed to address the need for a transaction—based transport protocol in the TCP/IP stack。

TCP and UDP are the current choices available for transaction—based applications. TCP is reliable but inefficient for transactions, whereas UDP is unreliable but highly efficient. T/TCP sits between these two protocols, making it an alternative for certain applications.

Currently, several flavours of UNIX support T/TCP. Sun OS 4.1.3 (a Berkeley—derived kernel) was the very first implementation of T/TCP, and made available in September 1994. The next implementation was for Free BSD 2.0, released in March 1995. For my final-year project, I implemented T/TCP for Linux at the University of Limerick in April 1998. The source code is available at http://www。csn.ul.ie/~heathclf/fyp/.

In this article, I discuss the operation, advantages and flaws of T/TCP. This will allow application developers to decide when T/TCP is appropriate for networking applications. I present my results from a comparative analysis between T/TCP and TCP, based on the number of packets per session for each transaction。 I also give my conclusions from a case study I conducted into the possible impact of T/TCP on the World Wide Web. Introduction

--

--

The TCP/IP reference model is a specification for a networking stack on a computer。 It exists to provide a common ground for network developers. This allows easier interconnection of the different vendor-supplied networks。

The most popular implementations of the transport layer in the reference model are Transmission Control Protocol (TCP), a connection—oriented protocol, and User Datagram Protocol (UDP), a connectionless protocol.

Both of these protocols have advantages and disadvantages。 The two main aspects of the protocols make them useful in different areas。 Being a connectionless protocol, UDP is unreliable but fast and useful for applications, such as DNS (Domain Name System), where speed is preferred over reliability。 TCP, on the other hand is a reliable, connection-oriented protocol。 As a result, TCP is a slower protocol than UDP.

With the explosion of the Internet in recent years, the need for a new specification arose。 The current transport protocols were either too verbose or not reliable enough。 A protocol was needed that was faster than TCP but more reliable than UDP. This new protocol could reduce bandwidth and increase the speed of transmission of data, which is very much needed at the moment.

TCP for Transactions (T/TCP) is a possible successor to both TCP and UDP. It is a transaction—oriented protocol based on a minimum transfer of segments, so it does not have the speed problems associated with TCP. By building on TCP, it does not have the unreliability problems associated with UDP. With this in mind, RFC1379 was published in November 1992。 It discussed the concepts involved in extending the TCP protocol to allow for a transaction-oriented service. Some of the main points the RFC discussed were bypassing the three-way handshake and shortening the TIME—WAIT state from 240 seconds to 12 seconds。 Eighteen months later, RFC1644 was published, with the specification for Transaction TCP。 T/TCP cut

--

--

s out much unnecessary handshaking and error detection done by the current TCP protocol, and as a result, increases the speed of connection and reduces the necessary bandwidth. Transaction Transmission Control Protocol

T/TCP can be considered a superset of the TCP protocol. The reason for this is that T/TCP is designed to work with current TCP machines seamlessly。 What follows is a brief description of T/TCP and how it differs from the current TCP standard in operation. What is a Transaction?

The term ``transaction'' refers to the request sent by a client to a server, along with the server's reply. RFC955 lists some of the common characteristics of transaction processing applications:

• Asymmetrical Model: the two end points take differen

t roles; this is a typical client-server role where the client requests the data and the server responds。

• Short Duration: normally, a transaction runs for a short

time span.

• Few Data Packets: each transaction is a request for a

small piece of information, rather than a large transfer of information both ways. Background to T/TCP

The growth of the Internet has put a strain on the bandwidth and speed of networks. There are now more users than ever, and a more efficient form of data transfer is needed.

The absolute minimum number of packets required in a transaction is two: one request followed by one response. UDP is the one protocol in the TCP/IP protocol stack that allows this, but the problem is the unreliability of the transmission。

--

--

T/TCP has the reliability of TCP and comes very close to realizing the 2—packet exchange (three in fact). T/TCP uses the TCP state model for its timing and retransmission of data, but introduces a new mechanism to allow the reduction in packets.

Even though three packets are sent using T/TCP, the data is carried on the first two, thus allowing the applications to see the data with the same speed as UDP. The third packet is the acknowledgment to the server by the client that it has received the data, which is how the TCP reliability is incorporated.

--

--

二、英文翻译

T / TCP:TCP进行交易

T/ TCP是TCP协议的一个实验性的扩展。它被设计为以交易为基础的传输协议为TCP/ IP协议栈解决需要。

TCP和UDP是目前可供选择的以交易为基础的应用程序。 TCP是可靠的,但交易效率低下,而UDP是不可靠的,但是高效的。 T/ TCP介于在这两个协议之间,对应于某些应用的替代.

目前,有几个不同的UNIX版本支持T / TCP。 OS4。1.3(伯克利派生出来的内核)第一个实施T/ TCP,并于1994年9月提供。下一个实施免费的BSD2。0,发布于1995年3月。对于我最后一年的项目,我实现了T/ TCP利默里克大学,于1998年4月的Linux.源代码是可用,在http://www.csn.ul.ie/〜heathclf/ FYP/中。

在这篇文章中,我讨论了操作T/ TCP的优点和缺陷。这将允许应用程序开发人员来决定T / TCP是适合于网络应用。我提出我的T / TCP和TCP协议,基于每个会话的数据包为每个交易的数量之间的对比分析结果。我也给我的T/ TCP在万维网上,可能产生的影响进行了案例研究。

1、介绍

一个网络栈的计算机上的TCP / IP参考模型是一种规范。它的存在是为了给网络开发者提供一个共同的基础。这使得不同的供应商提供的网络更容易互连。

最流行的实现在参考模型中的传输层是传输控制协议(TCP),一个面向连接的协议,用户数据报协议(UDP),一个无连接的协议.

这两种协议都具有优点和缺点。主要有两个方面的协议使他们在不同的领域非常有用。作为一个无连接的协议,UDP是不可靠的,但快速,有用的应用程序,如DNS(域名系统),速度优于可靠性。 TCP,在另一方面,是一个可靠的,面向连接的协议。其结果是,TCP比UDP协议是一个缓慢的.

由于近年来互联网的发展,产生一个新的规范需要。电流传输协议不是太详细或不够可靠。需要一个协议比TCP快,但比UDP更加可靠。这个新的协议可以减少带宽和增加的速度传输数据,这是非常必要的。

交易(T/ TCP)TCP是TCP和UDP的继任者。它是一种面向事务处理的协议,以最低字段为基础,所以它不存在与TCP速度相关的问题.同样,它不具有与UDP的不可靠性问题.考虑到这一点,讨论所涉及的概念扩展允许TCP协议面向事

--

--

务处理服务。 RFC讨论的要点绕过三次握手,并从240秒缩短到12秒TIME-WAIT状态. 18个月后,RFC14公布,规范交易TCP. T/ TCP削减了许多不必要的握手和当前的TCP协议所需要通过的错误检测,其结果是,提高了连接速度,同时减少了不必要的带宽。 2、交易传输控制协议

可以认为T/ TCP 是TCP协议的一个超集。这样做的原因是,T/ TCP的设计工作,与当前的TCP机无缝。下面是一个简要说明了T / TCP和它是如何操作从当前的TCP标准不同。 3、什么是交易?

术语“交易\"是指由客户端发送到服务器的请求,以及与服务器的答复. RFC955列出一些事务处理应用程序的共同特点:

非对称模型:两个端点采取不同的角色,这是一个典型的客户端 - 服务器角色数据和服务器响应客户端请求。

短的时间:通常情况下,一个事务运行很短的时间跨度。

一些数据包:每一笔交易相当于一小块的信息,而不是一个大的传输信息。 4、T/ TCP的背景

在增长的互联网网络的带宽和速度上放置张力。由于现在比以往任何时候都更多的用户,并需要更高效的数据传输形式.

在交易中所需的数据包最低数量是两个:一个请求,然后一个响应。 UDP是在是TCP / IP的协议栈,这允许了一个协议不可靠的传输。

T/ TCP拥有 TCP的可靠性,并实现2包交换(其实三)。 T/ TCP使用TCP状态模型的时间和重传的数据,但引入了一个新的机制,让包减少。

尽管有3个数据包在传输时使用T / TCP,进行数据的前两个数据包是由服务器完成,从而使应用程序以同样的速度为UDP的数据报文的发送.

--

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baijiahaobaidu.com 版权所有 湘ICP备2023023988号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务