《Java面向对象编程》课件-第16章 网络编程_第1页
《Java面向对象编程》课件-第16章 网络编程_第2页
《Java面向对象编程》课件-第16章 网络编程_第3页
《Java面向对象编程》课件-第16章 网络编程_第4页
《Java面向对象编程》课件-第16章 网络编程_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第16章网络编程

学习内容02网络通信协议Udp数据传输0103Tcp数据传输01网络通信协议网络通信协议概念网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。这些规则对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。网络通信协议有很多种,目前应用最广泛的是TCP/IP协议,它是一个包括TCP协议、IP协议、UDP协议和其他一些协议的协议组。TCP/IP协议:TCP/IP协议层次结构比较简单,共分为四层TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层,每层分别负责不同的通信功能。Ip地址要想使网络中的计算机能够进行通信。必须为每台计算机指定一个标识号,通过这个标识号来指定接收数据的计算机或者发送数据的计算机。在TCP/IP协议中,这个标识一号就是IP地址,它可以唯一标识一台计算机.目前.IP地址广泛使用的版本是IPv4,它是由4个字节大小的二进制数来表示。端口号通过IP地址可以连接到指定计算机,但如果想访问目标计算机中的某个应用程序.还需要指定端口号。在计算机中,不同的应用程序是通过端口号区分的。端口号是用两个字节(16位的二进制数)表示的,它的取值范围是0-65535,其中,0-1023之间的端口号用于一些知名的网络服务和应用,用户的普通应用程序需要使用1024以上的端口号,从而避免端口号被另外一个应用或服务所占用。01网络通信协议InetAddressnetAddeess类:jdk中提供了该类,用于封装一个IP地址,并提供了一系列与IP地址相关的方法,下表列举了InetAddress类的一些常用方法。方法声明功能描述InetAddressgetByName(Stringhost)参数host表示指定的主机,该方法用于在给定主机名的情况下确定主机的IP地址InetAddressgetlocalHost()创建一个表示本地主机的InetAddress对象

StringgetHostName()得到IP地址的主机名,如果是本机则是计算机名。不是本机则是主机名,如果没有域名则是IP地址booleanisReachable(inttimeout)判断指定的时间内地址是否可以到达StringgetHostAddress()得到字符串格式的原始IP地址02网络通信协议Tcp协议TCP是TransmissionControlProtocol的简称,称为传输控制协议.原理:TCP协议是面向连接的通信协议.即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求.每次连接的创建都需要经过“三次握手”。第一次握手,客户端向服务器端发出连接请求,等待服务器确认;第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求;第三次握手,客户端再次向服务器端发送确认信息.确认连接。由于TCP协议的面向连接特性.它可以保证传输数据的安全性.所以是一个被广泛采用的协议.例如在下载文件时.如果数据接收不完整.将会导致文件数据丢失而不能被打开.因此,下载文件时必须采用TCP协议.Udp协议UDP是UserDatagramProtocol的简称,称为用户数据报协议。原理:UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接.简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据.同样接收端在收到数据时,也不会向发送端反馈是否收到数据。由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输,例如视频会议都使用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。但是在使用UDP协议传送数据时,由于UDP面向无连接性.不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。02Udp数据传输DatagramPacket在创建发送端和接收端的DatagramPacket对象时,使用的构造方法有所不同,接收端的构造方法只需要接收一个字节数组来存放接收到的数据,而发送端的构造方法不但要接收存放了发送数据的字节数组.还需要指定发送端IP地址和端口号。DatagramPacket的构造方法如下表所示。构造方法声明功能描述DatagramPacket(byte[]buf,intlength)使用该构造方法在创建DatagramPacket对象时没有指定IP地址和端口号,很明显这样的对象只能用于接收端.不能用于发送端.因为发送端一定要明确指出数据的目的地(IP地址和端口号).而接收端不需要明确知道数据的来源.只需要接收到数据即可。DatagramPacket(byte[]buf,intlength,InetAddressaddr,intport)

使用该构造方法在创建DatagramPacket对象时,指定了数据包的目标IP地址(addr)和端口号(port).该对象通常用于发送端.因为在发送数据时必须指定接收端的IP地址和端口号.就好像发送货物的集装箱上面必须标明接收人的地址一样。DatagramPacket类中的常用方法如下表所示。方法声明功能描述InetAddressgetAddress()该方法用于返回发送端或者接收端IP地址.intgetPort()该方法用于返回发送端或者接收端的端口号。Byte[]getData()该方法用于返回将要接收或者将要发送的数据intgetlength()该方法用于返回接收或者将要发送数据的长度02Udp数据传输DatagramSocket在程序中需要实现通信,只有DatagramPacket数据包不行,为此java提供了一个DatagramSocket类。DatagramSocket类的作用就类似于码头,使用这个类的实例对象,就可以发送和接收DatagramPacket数据包,DatagramSocket类常见的构造方法进行讲解,如下表所示:构造方法声明功能描述DatagramSocket()该构造方法用于创建发送端的DatagramSocket对象,在创建DatagramSocke对象时,并没有指定端口号,此时系统会分配一个没有被其他网络程序所使用的端口号,端口是大于1024的活动端口。DatagramSocket(intport)该构造方法既可用于创建接收端DatagramSocket对象,又可以创建发送端的DatagramSocket对象,在创建接收端的DatagramSocket对象时,必须要指定一个端口号,这样就可以监听指定的端口。DatagramSocket(intport,InetAddressaddr)使用该构造方法在创建DatagramSocket时,不仅指定了端口号,还指定了相关的ip地址,这种情况适用于计算机上有多块网卡的情况。DatagramSocket类中的常用方法如下表所示:构造方法声明功能描述voidreceive(DatagramPacketP)该方法用于将接收到的数据填充到DatagramPacket数据包中,在接收到数据之前会一直处于阻塞状态,只有当接收到数据包时,该方法才会返回

voidsend(DatagramPacketp)该方法用于发送DatagramPacket数据包。voidclose()关闭当前的Socket,通知驱动程序释放为这个Socket保留的资源02

Udp数据传输UDP网络程序要实现UDP通信需要创建一个发送端程序和一个接收端程序.很明显.在通信时只有接收端程序先运行,才能避免因发送端发送的数据无法接收,而造成数据丢失。publicclassDemo2Receive{publicstaticvoidmain(String[]args)throwsIOException{//建立udp的服务,并且要监听一个端口。

DatagramSocketsocket=newDatagramSocket(9090);//准备空的数据包用于存放数据。

byte[]buf=newbyte[1024];DatagramPacketdatagramPacket=newDatagramPacket(buf,buf.length);//1024System.out.println("等待接收数据:");//调用udp的服务接收数据

socket.receive(datagramPacket);//receive是一个阻塞型的方法,没有接收到数据包之前会一直等待。数据实际上就是存储到了byte的自己数组中了。

System.out.println("接收端接收到的数据:"+newString(buf,0,datagramPacket.getLength()));//getLength()获取数据包存储了几个字节。

//关闭资源

socket.close();}}publicclassDemo2Sender{publicstaticvoidmain(String[]args)throwsIOException{//建立udp的服务

DatagramSocketdatagramSocket=newDatagramSocket();//准备数据,把数据封装到数据包中。

Stringdata="通过Udp协议发送helloworld";//创建了一个数据包

DatagramPacketpacket=newDatagramPacket(data.getBytes(),data.getBytes().length,InetAddress.getLocalHost(),9090);//调用udp的服务发送数据包

System.out.println("发送数据");datagramSocket.send(packet);//关闭资源---实际上就是释放占用的端口号

datagramSocket.close();}}03

Tcp数据传输ServerSocketJava提供了一个ServerSocket类。该类的实例对象可以实现一个服务器端的程序。通过查阅API文档可知,ServerSocket类提供了多种构造方法,ServerSocket的构造方法如下表所示:构造方法声明功能描述ServerSocket()使用该构造方法在创建ServerSocket对象时并没有绑定端口号.这样的对象创建的服务器端没有监听任何端口,不能直接使用,还需要继续调用bind(SocketAddressendpoint)方法将其绑定到指定的端口上,才可以正常使用。ServerSocket(intport)使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指定的端口号上(参数port就是端口号)。ServerSocket(intport,intbacklog)该构造方法就是在第二个构造方法的基础上,增加了一个backlog参数。该参数用于指定在服务器忙时.可以与之保持连接请求的等待客户数量,如果没有指定这个参数,默认为50ServerSocket的常用方法,如下表所示。方法声明功能描述Socketaccept()该方法用于等待客户端的连接,在客户端连接之前一直处于阻塞状态,如果有客户端连接就会返回一个与之对应的Socket对象InetAddressgetlnetAddress()该方法用于返回一个InetAddress对象,该对象中封装了ServerSocket绑定的IP地址

booleanisClosed()该方法用于判断ServerSocket对象是否为关闭状态.如果是关闭状态则返回true,反之则返回falsevoidbind(SocketAddressendpoint)该方法用于将ServerSocket对象绑定到指定的IP地址和端口号,其中参数endpoint封装了IP地址和端口号03

Tcp数据传输Socketjava提供了一个Socket类,用于实现TCP客户端程序。通过查阅API文档可知Socket类同样提供了多种构造方法,接下来就对Socket的常用构造方法如下表所示:构造方法声明功能描述Socket()使用该构造方法在创建Socket对象时,并没有指定IP地址和端口号,也就意味着只创建了客户端对象,并没有去连接任何服务器。通过该构造方法创建对象后,还需调用connect(SocketAddressendpoint)方法,才能完成与指定服务器端的连接。Socket(Stringhost,intport)

使用该构造方法在创建Socket对象时,会根据参数去连接在指定地址和端口上运行的服务器程序。Socket(InetAddressaddress,intport)该方法在使用上与第二个构造方法类似,参数address用于接收一个InetAddress类型的对象,该对象用于封装一个IP地址。Socket的常用方法,如下表所示:方法声明功能描述intgetPort()该方法返回一个int类型对象,该对象是Socket对象与服务器端连接的端口号

InetAddressgetlocalAddress()该方法用于获取Socket对象绑定的本地IP地址,并将IP地址封装成InetAddress类型的对象返回voidclose()该方法用于关闭Socket连接,结束本次通信。InputStreamgetInputStream()该方法返回一个InputStream类型的愉人流对象。如果该对象是由服务器端的Socket返回,就用于读取客户端发送的数据,反之,用于读取服务器端发送的数据。OutputStreamgetOutputStream()该方法返回一个OutputStream类型的输出流对象.如果该对象是由服务器端的Socket返回,就用于向客户端发送数据,反之,用于向服务器端发送数据。03

Tcp数据传输Tcp网络程序要实现TCP通信需要创建一个服务器端程序和一个客户端程序,代码如下:publicclassDemo3Server{

publicstaticvoidmain(String[]args)throwsException{

//建立Tcp的服务端,并且监听一个端口。

ServerSocketserverSocket=newServerSocket(9090);

//接受客户端的连接

Socketsocket=serverSocket.accept();//accept()接受客户端的连接该方法也是一个阻塞型的方法,没有客户端与其连接时,会一直等待下去。

InputStreaminputStream=socket.getInputStream();

byte[]buf=newbyte[1024];

intlength=0;

length=inputStream.read(buf);

System.out.println("服务端接收:"+newString(buf,0,length));

//获取socket输出流对象,想客户端发送数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论