即时通讯软件的设计论文.docx
- 文档编号:9301039
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:27
- 大小:122.38KB
即时通讯软件的设计论文.docx
《即时通讯软件的设计论文.docx》由会员分享,可在线阅读,更多相关《即时通讯软件的设计论文.docx(27页珍藏版)》请在冰豆网上搜索。
即时通讯软件的设计论文
即时通讯软件的设计
班级09计算机网络
专业计算机网络技术
教学系信息工程系
指导老师
完成时间:
2011年11月1日至2011年11月20日
目录
第一章引言2
1.1即时通讯软件设计的意义及来源2
1.2即时通讯软件的现状2
1.3客户/服务器模式的基本概念3
1.4功能的实现及使用的技术3
1.4.1服务器部分4
1.4.2客户端部分4
1.5设计工作的概要介绍5
第二章相关开发技术的原理性说明5
2.1TCP/IP协议5
2.1.1TCP/IP协议参考模型的层次结构5
2.1.2TCP/IP协议的通信方式7
2.2P2P技术原理8
第四章详细设计9
4.1面向连接TCP通信类10
4.1.2服务端11
4.1.3服务端16
结束语19
参考文献20
即时通讯软件的设计
摘要:
即时通讯(InstantMessaging,IM)是目前Internet上最为流行的通讯方式,而各种各样的即时通讯软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。
随着互联网的发展,即时通讯的运用将日益广泛。
本论文初步探讨的即时通讯所涉及到的一些技术,例如:
Client/Server模式,P2P通信模式,STP协议,即时通讯软件的拓扑结构等。
最后,应用Java及软件工程,数据库技术编写出Client端和Server端程序,能够实现客户端与客户端的通讯
关键词:
Client/Server模式,P2P通信模式,STP协议
第一章引言
1.1即时通讯软件设计的意义及来源
即时通讯软件是通过即时通讯技术来实现在线聊天、交流的软件。
从80年代后期,尤其是90年代至今,基于TCP/IP协议的即时通信系统获得了更为广阔的发展空间。
尤其是移动互联网的发展,标志着以“互联网、方便、时尚”为特征的后PC时代的到来,网上聊天的主要工具已经从初期的聊天室、论坛变为以“MSN”、“QQ”为主要特征的网络即时通信(InstantMessaging,缩写为IM,是以Internet网络及其它有线、无线网络为基础,实现交互双方文字、文件、语音等信息实时传送的通信过程。
)即时通信系统的最大特点就是能在网上进行信息的实时交流,与传统的通信方式相比,即时通信具有快捷、廉价、隐蔽性等特点,在网络上可以跨年龄、身份、行业、地域的限制,达到人与人之间的零距离交流,使得人们的沟通更加方便、快捷,最大程度的体现了网络给人们生活带来的翻天覆地变化。
即时通讯软件,几乎是每一个上网用户都必备的联络工具,它除了能够让我们迅速地在网上找到自己的朋友和工作伙伴外,还可以实时交谈和传递信息,而且,现在不少即时通讯软件还集成了文件共享、语音聊天、网络会议等功能。
截止到目前,全球约有近3亿多人使用即时通讯软件进行交流。
1.2即时通讯软件的现状
广域网上的即时通信工具,如今一般采用UDP或者TCP协议体系来实现,开发技术已经比较成熟,比如较早的ICQ、MSNMessenger、YAHOO通等国外开发的产品,还有国产的有名的QQ、新浪UC、LAVA-LAVA等,这些工具统统都实现了广域网上的即时通信,尽管都是即时通信,实现了即时聊天,以及文件传输的主要功能,但是也各有各的特色,比如ICQ的巨大客户群,MSN的个性化表情,YAHOO通的易操作性等,而QQ也具有一个相当方便的屏幕截图功能,另外就是,所有上述软件都实现了网络即时的视频,语音聊天功能。
这些软件,在使用方面各有特色,在实现方面也各有所长,但由于这些产品正在商业运营阶段,其实现方式属于商业机密,具体细节不可能得知,但是它在大的方面无非就是各种利用各种平台上的网络通信接口,建构基于下层TCP/IP,或者UDP/IP协议的软件产品。
现代社会随着网络通信技术的进一步发展和互联网的普及,会有更多的网络用户,同时也会有更多的即时通讯软件出现。
因此,需对现有的即时通讯软件进行研究和设计,以适应新的用户需求。
1.3客户/服务器模式的基本概念
在客户/服务器模式中,客户与服务器分别表示相互通信的两个应用程序进程。
客户向服务器发出服务请求,服务器响应客户的请求,提供客户所需要的网络服务。
客户/服务器模式的进程相互作用
如图
1.4功能的实现及使用的技术
本设计将客户端和服务器做到了一起,使用时由用户自行选择。
为方便说明客户端/服务器的概念,下面将分别简单讲述两个部分的关键技术:
1.4.1服务器部分
服务器端主要完成通信线路的建立和接收用户端传来的信息,服务器程序通常都与数据库相结合,用户端只有向服务器发送连接请求,得到服务器段允许才可以建立连接。
等待客户连接请求、客户连接、会话产生、完成会话、关闭连接,服务器通过上述程序实现数据传输。
其中关键问题主要集中在以下几个方面:
编码压缩及传输技术、存储和I/O调度策略、流量控制与差错控制、接入控制、IP网的实现,服务器客户端模型
如图
1.4.2客户端部分
客户端主要工作是使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。
客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口[2]。
它的核心部分主要有:
应答区、对话区等。
不同协作类型的系统对这2个部分的侧重点可能不同,开发过程中涉及TCP/IP协议技术,Java编程技术等。
1.5设计工作的概要介绍
本设计的研发过程是严格按照软件工程开发流程进行的,主要工作包括项目的需求分析,结构规划,通信模块的设计,类结构及类图的制定,在这个过程中主要利用计算机通信协议原理,在WINDOS平台下开发通信软件,主要包括套接字编程,以及通信程序设计实现技术。
第二章相关开发技术的原理性说明
2.1TCP/IP协议
2.1.1TCP/IP协议参考模型的层次结构
TCP协议是一个面向连接的、可靠的协议。
它将一台主机发出的字节流无差错地发往互联网上的其他主机。
在发送端,它负责把上层传送下来的字节流分成报文段并传递给下层。
在接收端,它负责把收到的报文进行重组后递交给上层。
此外,TCP协议还需要完成流量控制功能,协调收发双方的发送与接收速度,以达到正确传输的目的。
TCP/IP参考模型分为四个层次:
应用层、传输层、网络互连层和网络接口层。
如表2-1所示。
表2-1 TCP/IP参考模型的层次结构
成员变量描述
应用层MAIL、TELNET、FTP、SMTP、HTTP、WWW、SNMP、TFTP
传输层TCP、UDP
网络互连层ICMP、IP、ARP、RARP
网络接口层HDLCPPPFPAME—RELAY、EIA/TIA-232,449、V.35、V.21
TCP/IP协议中的核心部分是传输层协议(TCP、UDP)、网络层协议(IP)和网络接口层,这3层通常是在操作系统内核中实现,因此用户一般不涉及。
在具体编程时,将提供以下两种形式的编程界面:
由内核心直接提供的系统调用或使用以库函数方式提供的各种函数。
前者为内核实现,后者为核外实现。
用户服务要通过核外的应用程序才能实现,也就是使用套接字[7]。
图2-1中展示了TCP/IP协议核心与应用程序的一般关系。
在TCP/IP参考模型中,去掉了OSI参考模型中的会话层和表示层(这两层的功能被合并到应用层实现)。
同时将OSI参考模型中的数据链路层和物理层合并为网络接口层。
下面,分别介绍各层的主要功能。
1、网络接口层
网络接口层实际上并不是因特网协议组中的一部分,但是它是数据包从一个设备的网络层传输到另外一个设备的网络层的方法。
这个过程能够在网卡的软件驱动程序中控制,也可以在韧体或者专用芯片中控制。
这将完成如添加报头准备发送、通过物理媒介实际发送这样一些数据链路功能。
另一端,链路层将完成数据帧接收、去除报头并且将接收到的包传到网络层。
2、网络互连层
网络互连层是整个TCP/IP协议栈的核心。
它的功能是把分组发往目标网络或主机。
同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。
因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。
网络互连层定义了分组格式和协议,即IP协议(InternetProtocol)。
网络互连层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。
除此之外,网络互连层还需要完成拥塞控制的功能。
3、传输层
在TCP/IP模型中,传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。
在传输层定义了两种服务质量不同的协议。
即:
传输控制协议TCP(transmissioncontrolprotocol)和用户数据报协议UDP(userdatagramprotocol)。
4、应用层
TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。
应用层面向不同的网络应用引入了不同的应用层协议。
其中,有基于TCP协议的,如文件传输协议(FileTransferProtocol,FTP)、虚拟终端协议(TELNET)、超文本链接协议(HyperTextTransferProtocol,HTTP),也有基于UDP协议的。
开发通信系统时,关心的主要是网络层的IP协议和运输层的TCP和UDP协议(是一种不可靠的无连接协议,主要用于不要求分组顺序到达的传输中,分组传输顺序检查与排序由应用层完成)。
2.1.2TCP/IP协议的通信方式
TCP/IP协议是Internet上广泛使用的一种协议,可用于异种机之间的互联。
在网络编程中,程序员只需要利用协议的网络编程接口Socket9(也称套接字)即可。
在Windows中,网络编程接口是WindowsSocket,它包含标准的BerkleySocket的功能调用集合,以及为Windows所做的一些扩展。
TCP/IP协议的应用一般采用客户/服务器模式,面向连接的应用调用如图2-2所示。
2.2P2P技术原理
什么是对等网络(P2P)技术?
P2P技术属于覆盖层网络(OverlayNetwork)的范畴,是相对于客户机/服务器(C/S)模式来说的一种网络信息交换方式。
在C/S模式中,数据的分发采用专门的服务器,多个客户端都从此服务器获取数据。
这种模式的优点是:
数据的一致性容易控制,系统也容易管理。
但是此种模式的缺点是:
因为服务器的个数只有一个(即便有多个也非常有限),系统容易出现单一失效点;单一服务器面对众多的客户端,由于CPU能力、内存大小、网络带宽的限制,可同时服务的客户端非常有限,可扩展性差。
P2P技术正是为了解决这些问题而提出来的一种对等网络结构。
在P2P网络中,每个节点既可以从其他节点得到服务,也可以向其他节点提供服务。
这样,庞大的终端资源被利用起来,一举解决了C/S模式中的两个弊端。
P2P网络有3种比较流行的组织结构,被应用在不同的P2P应用中。
(1)DHT结构
分布式哈希表(DHT)[1]是一种功能强大的工具,它的提出引起了学术界一股研究DHT的热潮。
虽然DHT具有各种各样的实现方式,但是具有共同的特征,即都是一个环行拓扑结构,在这个结构里每个节点具有一个唯一的节点标识(ID),节点ID是一个128位的哈希值。
每个节点都在路由表里保存了其他前驱、后继节点的ID。
通过这些路由信息,可以方便地找到其他节点。
这种结构多用于文件共享和作为底层结构用于流媒体传输。
(2)树形结构
P2P网络树形结构如图1(b)所示。
在这种结构中,所有的节点都被组织在一棵树中,树根只有子节点,树叶只有父节点,其他节点既有子节点也有父节点。
信息的流向沿着树枝流动。
最初的树形结构多用于P2P流媒体直播[3-4]。
(3)网状结构
网状结构如图1(c)所示,又叫无结构。
顾名思义,这种结构中,所有的节点无规则地连在一起,没有稳定的关系,没有父子关系。
网状结构[5]为P2P提供了最大的容忍性、动态适应性,在流媒体直播和点播应用中取得了极大的成功。
当网络变得很大时,常常会引入超级节点的概念,超级节点可以和任何一种以上结构结合起来组成新的结构。
如图所示
第四章详细设计
4.1面向连接TCP通信类
1.InetAddress
在包中提供了InetAdress类,用来描述一个IP地址,此类中提供了一些常用的方法来访问网络资源,如:
·publicstaticInetAddressgetByName(Stringhost)throwsUnknowHostException:
确定所给主机名的计算机的IP地址。
·publicstaticInetAddressgetLocalHost()throwsUnknowHostException:
返回本地主机名和IP地址。
·publicStringgetHostName():
获得指定IP地址的主机名。
2.Socket
Socket用在客户端,用户通过构造一个Socket对象来建立与服务器的连接。
Socket连接有两种分别是流连接和数据连接,以下是Socket类的构造方法主要有一下几种:
·Socket():
建立一个空的Socket类的对象。
·Socket(Stringhost,intport):
构造一个连接指定主机,指定端口的Socket流对象。
·Socket(Stringhost,intport,booleantype):
构造一个连接指定主机,指定端口的Socket类的对象,boolean类型参数用来设置是流连接还是数据连接。
·Socket(InetAddressaddress,intport):
构造一个指定Internet地址,指定端口的Scoket流对象。
·Socket(InetAddressaddress,intport,booleantype):
构造一个指定Internet地址,指定端口的Scoket流对象,boolean类型参数用来设置是流连接还是数据流接。
构造完Scoket对象后,就可以通过Scoket类来建立输入,输出流,通过流来传输数据。
其方法如下:
·InputStreangetInputStream():
获得Scoket的输入流。
·OutputStreamgetOutputStream():
获得Socket的输出流。
·voidclose():
关闭Socket。
3.ServerSocket
ServerSocket类用在服务端,接受用户端传送的数据,构造方法如下:
·ServerSocket():
建立一个没有绑定端口的ServerSocket类对象。
·ServerSocket(intport):
建立一个绑定指定端口的ServerSocket对象。
ServerSocket类常用的成员方法;
·Socketaccept():
等待连接,此方法在指定ServerSocket上挂起等待,直到有用户连接时,
才建立一个用于处理用户请求的新的Socket对象。
·voidbind(SocketAddressendport):
绑定到指定IP地址的方法。
·voidclose():
关闭连接。
4.1.2服务端
//聊天室服务器
import.*;
importjava.io.*;
importjava.util.*;
importjava.awt.event.*;
importjava.awt.*;
importjavax.swing.*;
classServerextendsJFrame{
privateTextAreamsgA=newTextArea();//服务器用来输入的文本域
privateTextAreaarea=newTextArea();//服务器显示消息的文本域
privatejava.awt.Listlist=newjava.awt.List();//在线客户列表
privateServerSocketserver;//服务器
privateSocketclient;//客户端
privateMap
voidinit(){
//设置几个面板
Panelp1=newPanel();
Panelp2=newPanel();
Panelp3=newPanel();
Panelp4=newPanel();
Panelp5=newPanel();
Panelp6=newPanel();
Panelp7=newPanel();
//设置两个主要的文本框
BorderLayoutborder1=newBorderLayout();
p1.setLayout(border1);
p1.add(BorderLayout.CENTER,area);
BorderLayoutborder2=newBorderLayout();
p3.setLayout(border2);
p3.add(BorderLayout.NORTH,p2);
p3.add(BorderLayout.CENTER,msgA);
BorderLayoutborder3=newBorderLayout();
p4.setLayout(border3);
p4.add(BorderLayout.CENTER,p1);
p4.add(BorderLayout.SOUTH,p3);
JButtonstartButton=newJButton("启动服务");
JButtonsendButton=newJButton("发送");
JButtonflushButton=newJButton("刷新列表");
FlowLayoutfl=newFlowLayout(FlowLayout.LEFT);
p5.setLayout(fl);
p5.add(startButton);
p5.add(sendButton);
p5.add(flushButton);
BorderLayoutborder4=newBorderLayout();
p6.setLayout(border4);
p6.add(BorderLayout.CENTER,p4);
p6.add(BorderLayout.SOUTH,p5);
p7.setLayout(newBorderLayout());
Labellb3=newLabel("在线用户");
p7.add(lb3,BorderLayout.NORTH);
p7.add(list,BorderLayout.CENTER);
area.setEditable(false);
BorderLayoutborder=newBorderLayout();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(border);
this.add(BorderLayout.CENTER,p6);
this.add(BorderLayout.EAST,p7);
this.setTitle("聊天服务器");
this.setBounds(100,100,600,550);
this.setVisible(true);
//"启动服务"按钮监听器
startButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
Threadt=newStart();
t.start();
}
});
//发送按钮监听器
sendButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
Stringmsg=msgA.getText();
if(msg!
=null&&msg!
=""){//如果消息不为空
Calendarca=newGregorianCalendar();
inthh=ca.get(Calendar.HOUR_OF_DAY);
intmm=ca.get(Calendar.MINUTE);
intss=ca.get(Calendar.SECOND);
Stringtime=newString(hh+":
"+mm+":
"+ss+"");
broadcast(time+"[系统消息]:
"+msg);//那么广播这条系统消息
area.append(time+"[系统消息]:
"+msg+"\n");
msgA.setText("");
}
}
});
//刷新按钮监听器
flushButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(list!
=null){
list.removeAll();//清空在线用户列表,以便刷新
}
Set
for(Iterator
Map.Entry
StringaClientName=me.getKey();
SocketaClient=me.getValue();
StringaClientAddress=aClient.getInetAddress().getHostAddress();
list.add(aClientName+"----"+aClientAddress);
}
}
});
msgA.addKeyListener(newKeyAdapter(){//键盘监听器---按下Enter发送信息
publicvoidkeyPressed(KeyEvente){
intvalue=e.getKeyCode();
if(value==KeyEvent.VK_ENTER){
Stringmsg
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 即时通讯 软件 设计 论文