java实现点对点通信要点.docx
《java实现点对点通信要点.docx》由会员分享,可在线阅读,更多相关《java实现点对点通信要点.docx(14页珍藏版)》请在冰豆网上搜索。
java实现点对点通信要点
用java实现的点对点通信程序的设计
通信0903班学号:
姓名:
指导老师:
王国才、杨政宇
一设计目标:
1.使用Java高级面向对象编程语言编写一个网络聊天程序。
2.理解Socket的基本概念工作原理,掌握Socket的建立、监听、连接、发送数据和接收数据
3.环境要求:
Windows95/98/2000/XP,WinSocke
4.能将键盘上输入的数据发送到另一台计算机上;
5.能将接收到的数据显示到屏幕窗口内;
6.类似于一般的主流网络即时聊天程序为了简化程序和系统结构,将“客户端——服务器——客户端”的数据传输方式改为“客户端——服务器”的模式。
7.程序应该具有图形界面,要具备聊天程序的基本雏形。
二设计原理与方法
1.TCP/IP协议的介绍
TCP/IP(传输控制协议/网际协议)是互联网中的基本通信语言或协议。
在私网中,它也被用作通信协议。
当你直接网络连接时,你的计算机应提供一个TCP/IP程序的副本,此时接收你所发送的信息的计算机也应有一个TCP/IP程序的副本。
TCP/IP是一个两层的程序。
高层为传输控制协议,它负责聚集信息或把文件拆分成更小的包。
这些包通过网络传送到接收端的TCP层,接收端的TCP层把包还原为原始文件。
低层是网际协议,它处理每个包的地址部分,使这些包正确的到达目的地。
网络上的网关计算机根据信息的地址来进行路由选择。
即使来自同一文件的分包路由也有可能不同,但最后会在目的地汇合。
TCP/IP使用客户端/服务器模式进行通信。
TCP/IP通信是点对点的,意思是通信是网络中的一台主机与另一台主机之间的。
TCP/IP与上层应用程序之间可以说是“没有国籍的”,因为每个客户请求都被看做是与上一个请求无关的。
正是它们之间的“无国籍的”释放了网络路径,才是每个人都可以连续不断的使用网络。
许多用户熟悉使用TCP/IP协议的高层应用协议。
包括万维网的超文本传输协议(HTTP),文件传输协议(FTP),远程网络访问协议(Telnet)和简单邮件传输协议(SMTP)。
这些协议通常和TCP/IP协议打包在一起。
使用模拟电话调制解调器连接网络的个人电脑通常是使用串行线路接口协议(SLIP)和点对点协议(P2P)。
这些协议压缩IP包后通过拨号电话线发送到对方的调制解调器中。
与TCP/IP协议相关的协议还包括用户数据报协议(UDP),它代替TCP/IP协议来达到特殊的目的。
其他协议是网络主机用来交换路由信息的,包括Internet控制信息协议(ICMP),内部网关协议(IGP),外部网关协议(EGP),边界网关协议(BGP)。
2.socket协议介绍
(1).什么是socket
Socket,简称套接字,用于实现网络上客户和服务器之间的连接。
也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点成为套接字,套接字是在比较低的层次上通信的。
具体的说:
一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达时,客户端和服武器端建立一个通信连接,在连接过程中,客户端被分配一个本地端口与一个socket建立连接,客户端通过写socket来通知服务器,以读socket中的信息,类似的服务器也获得一个本地端口,它需要一个新的端口号来侦听原始端口上的其他连接请求。
服务器也通过它的本地端口连接一个socket,通过读写和客户端通信。
(2).Socket程序的工作过程:
1、建立Socket连接:
在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接通道。
2、数据通信:
利用虚拟连接通道传送数据信息进行通道。
3、关闭:
通信结束时,再将所建的虚拟连接拆除。
具体如下:
服务器
三次握手:
第一次握手:
原主机发送一个带有本次连接的序号的请求的一个数据帧
第二次握手:
目的主机收到请求后,如果同意连接,则发回一个带有一个本次连接序号和源端机连接序列号的确认。
第三此握手:
源端机收到含有两次初始序列号的应答后,在向目的主机发送一个带有两次连接的序列号的确认。
具体过程如下:
(3).如何开发一个Server-Client模型的程序
开发原理:
Ø服务器端,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。
Ø客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。
客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。
要学Internet上的TCP/IP网络编程,必须理解Socket接口。
Socket接口设计者最先是将接口放在Unix操作系统里面的。
如果了解Unix系统的输入和输出的话,就很容易了解Socket了。
网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。
Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
3.Java编程语言介绍
Java,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。
用Java实现的HotJava浏览器(支持Javaapplet)显示了Java的魅力:
跨平台、动态的Web、Internet计算。
从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Javaapplet。
(1)java平台构架
Java平台由Java虚拟机(JavaVirtualMachine)和Java应用编程接口(ApplicationProgrammingInterface、简称API)构成。
Java应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。
在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。
现在Java平台已经嵌入了几乎所有的操作系统。
这样Java程序可以只编译一次,就可以在各种系统中运行。
Java应用编程接口已经从1.1x版发展到1.2版。
目前常用的Java平台基于Java1.5,最近版本为Java1.7。
Java分为三个体系JavaSE(Java2PlatformStandardEdition,java平台标准版),JavaEE(Java2Platform,EnterpriseEdition,java平台企业版),JavaME(Java2PlatformMicroEdition,java平台微型版)。
*JavaSE(JavaPlatform,StandardEdition)。
JavaSE以前称为J2SE。
它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java应用程序。
JavaSE包含了支持JavaWeb服务开发的类,并为JavaPlatform,EnterpriseEdition(JavaEE)提供基础。
*JavaEE(JavaPlatform,EnterpriseEdition)。
这个版本以前称为J2EE。
企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java应用程序。
JavaEE是在JavaSE的基础上构建的,它提供Web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-orientedarchitecture,SOA)和Web2.0应用程序。
*JavaME(JavaPlatform,MicroEdition)。
这个版本以前称为J2ME。
JavaME为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。
JavaME包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。
基于JavaME规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。
4、设计方法
总的设计思想是利用java里的套接字Socket和ServerSocket(客户/服务器)来建立进程之间的通信,Socket和ServerSocket类库位于包中。
ServerSocket用于服务器端,Socket是建立网络连接时使用的。
在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。
对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。
不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。
"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。
getInputStream方法获得网络连接输入,同时返回一个InputStream对象实例。
getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。
注意:
其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。
三设计功能
1、将键盘上输入的数据发送到另一台计算机上
2、能将接收到的数据显示到屏幕窗口内
3、能和不同的电脑建立连接
4、有简单美观的界面
四程序流程图
不为空
五程序清单
服务器端
/**
*@(#)liaotian.java
*@author
*@version1.002012/9/12
*服务器端
*/
packagekeshe.xiaoxue;
importjavax.swing.*;//窗口工具包
import.*;//网络应用包
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.io.*;//输入输出软件包
//implementsAcionListene
classMyServerextendsJFrameimplementsActionListener{
JTextAreajta;
JTextFieldjtf;
JLabelpic1;
JLabelpic2;
JButtonjb;
JScrollPanejsp;
JPaneljp1;
PrintWriterpw;
publicstaticvoidmain(String[]args)
{
MyServermsv=newMyServer();
}
publicMyServer()
{
jta=newJTextArea();
jtf=newJTextField(20);
jsp=newJScrollPane(jta);
jb=newJButton("发送");