网络编程技术第十周.ppt
《网络编程技术第十周.ppt》由会员分享,可在线阅读,更多相关《网络编程技术第十周.ppt(61页珍藏版)》请在三一办公上搜索。
1、第五次课 Socket 编程(3)JavaMail编程(1),Socket编程(2),零、习题讲解,一、数据报式套接字,五、小结和作业,二、常用的邮件协议,三、环境配置,一、数据报式套接字,1、UDP协议,用户数据报协议:User Datagram Protocol一种面向无连接的传输层协议,提供面向操作的简单的不可靠数据传送服务。在网络中它与TCP协议一样用于处理数据包。UDP协议在发送数据时并不刻意追求数据包会完全发送出去,也不能担保它们抵达的顺序与它们发出时一样,所以它是一种不可靠协议。UDP传输数据之前客户端和服务器端不建立连接,当它想发送数据时则获取来自应用程序的数据,并尽可能快地把
2、它放到网络上。由于传输数据时不需建立连接,不需维护连接状态,因此一台服务器可同时向多个客户传输相同的数据。,一、数据报式套接字,2、数据报式套接字中所需的类,DatagramPacket类数据报包封装类。把具体的要传输的信息,包含IP地址,端口号和需要传输的数据等封装在称为数据报包(Datagram)的UDP包中。DatagramSocket类用于收发UDP数据报的套接字接口类。为发送数据,要将数据封装到DatagramPacket中,使用DatagramSocket发送该包。为接收数据,要从DatagramSocket中接收一个DatagramPakcet对象,然后解析该包的内容,一、数据报
3、式套接字,3、DatagramSocket类,功能该类表示用来发送和接收数据报包的套接字(Socket)。要收发DatagramPacket,必须创建一个数据报套接字DatagramSocket。,构造方法public DatagramSocket()throws SocketException功能:创建用于数据报通信的socket对象,由本地主机自动指定的一个可用的端口号。DatagramSocket socket=new DatagramSocket();/创建一个用于收发数据报的DatagramSocket对象,一、数据报式套接字,3、DatagramSocket类,构造方法public
4、 DatagramSocket(int port)throws SocketException功能:创建用于数据报通信的socket对象,并且把它绑定到本地主机指定的端口port。public DatagramSocket(int port,InetAddress addr)throws SocketException功能:创建用于数据报通信的socket对象,并绑定到指定的本地地址addr的指定端口port。DatagramSocket socket=new DatagramSocket(3000);/在端口3000创建用于通信的Socket对象,一、数据报式套接字,3、DatagramSo
5、cket类,常用方法一、发送方法public void send(DatagramPacket p)throws IOException功能:将数据报包p发送出去。二、接收方法public synchronized void receive(DatagramPacket p)throws IOException从网络接收一个UDP数据报包,并存储在DatagramPacket类对象p中。该数据报包p还包含发送方的IP 地址和发送方主机的端口号。,一、数据报式套接字,3、DatagramSocket类,public int getLocalPort()功能:获取该socket绑定的本地主机的端口
6、号。public void close()功能:释放该数据报socket所占用的端口。,常用方法public InetAddress getLocalAddress()功能:获取该socket绑定的本地地址。,一、数据报式套接字,4、DatagramPacket类,功能是进行数据报通信的基本单位。包含了IP地址、端口号和需要传输的数据等。在发送和接收数据报时,要创建DatagramPakcet类对象作为数据的载体。,构造方法之一:发送用的数据报public DatagramPacket(byte ibuf,int ilength,InetAddress iaddr,int iport)构造方法
7、之二:接收用的数据报public DatagramPacket(byte ibuf,int ilength),一、数据报式套接字,4、DatagramPacket类,构造方法之一:发送用的数据报public DatagramPacket(byte ibuf,int ilength,InetAddress iaddr,int iport)功能:创建一个用于发送数据报的DatagramPacket类对象。参数:ibuf:存储数据报的缓冲区。ilength:发送数据报的长度,必须小于等于ibuf.length。iaddr:数据报要发送到的目的IP地址。iport:数据报要发送到的目的地址的端口号。,
8、一、数据报式套接字,4、DatagramPacket类,构造方法之一:发送用的数据报public DatagramPacket(byte ibuf,int ilength,InetAddress iaddr,int iport)举例:String date=new Date().toString();/获取服务器当前时间buf=date.getBytes();/将当前日期时间存入字节数组bufpacket=new DatagramPacket(buf,buf.length,addr,port);/构造发送数据报包socket.send(packet);/发送数据报,一、数据报式套接字,4、Da
9、tagramPacket类,构造方法之一:接收用的数据报public DatagramPacket(byte ibuf,int ilength)功能:创建一个用于接收数据报的DatagramPacket类对象。参数:ibuf:存储数据报的缓冲区。在数据报通信中,发送和接收一个数据报,都需提供一个缓冲区,用来安置发送和接收到的数据报。ilength:接收数据报的长度,必须小于等于ibuf.length。举例:DatagramPacket packet=new DatagramPacket(buf,buf.length);socket.receive(packet);/接收数据报包,一、数据报式套
10、接字,4、DatagramPacket类,常用方法之解析数据报包的方法(1)public synchronized InetAddress getAddress()功能:返回存放在接收或发送的数据报中的IP地址。(2)public synchronized int getPort()功能:返回存放在接收或发送的数据报中的端口号。(3)public synchronized byte getData()功能:返回存放在数据报中的数据。(4)public synchronized int getLength()功能:返回数据报中数据的长度。,一、数据报式套接字,4、DatagramPacket类,
11、常用方法之解析数据报包的方法举例InetAddress addr=packet.getAddress();int port=packet.getPort();/解析收到的数据报包packet,返回客户端的IP地址和端口号String time=new String(packet.getData();/解析数据报包,获取其中的数据内容,一、数据报式套接字,4、DatagramPacket类,常用方法之封装数据报包的方法(5)public synchronized void setAddress(InetAddress iaddr)功能:设置发送数据报的目的地址为iaddr。(6)public s
12、ynchronized void setPort(int iport)功能:设置发送数据报的目的地址的端口号为iport。(7)public synchronized void setData(byte ibuf)功能:设置数据报中的数据内容为字节数组ibuf的数据。(8)public synchronized void setLength(int ilength)功能:设置数据报中的数据的长度为ilength。,一、数据报式套接字,5、编程基本步骤,开发基于UDP协议的网络应用程序时,需分别编写客户端和服务器端两个应用程序,这两个程序的基本架构相似。基本步骤如下:(1)建立一个Datagra
13、mSocket对象;(2)创建用于发送数据的DatagramPacket对象;封装:数据内容,数据长度,目的IP地址,目的端口号或创建用于接收数据的DatagramPacket对象;封装:存储数据报的缓冲区ibuf及缓冲区长度(3)利用DatagramSocket类方法receive()或send()接收或发送数据报包。,一、数据报式套接字,5、编程基本步骤,举例-1:TimeServer_UDP.java和TimeServer_UDP.java服务器开启了一个查询本机时间的服务,客户机如果需要查询服务器当前时间,就向服务器发送一个UDP数据报包,服务器将其当前的系统时间封装在一个UDP数据报
14、包中发送给客户机。,TimeServer_UDP.java运行界面,TimeClient_UDP.java运行界面,一、数据报式套接字,5、编程基本步骤,举例-2:TimeServer_UDP.java和TimeServer_UDP.java服务器开启了一个查询本机时间的服务,客户机如果需要查询服务器当前时间,就向服务器发送一个UDP数据报包,服务器将其当前的系统时间封装在一个UDP数据报包中发送给客户机。思路1.客户机向服务器发送一个UDP数据报包2.服务器从收到的DatagramPacket包中解析出客户机的IP地址和端口号3.然后将本机当前时间封装在一个以客户机IP地址和端口号的数据报包
15、中,发送给客户机。4.客户机收到后将时间解析出来显示。,一、数据报式套接字,5、编程基本步骤,举例-1:服务器端,在端口3000创建DatagramSocket对象socket,构造接收数据报包的DataPacket对象packetsocket.receive(packet);,进入循环,继续接收其他客户机的数据报包,获取系统当前时间并转换为字符串:String date=new Date().toString();buf=date.getBytes();,从客户端收到的数据报包中packet中解析出客户机的IP地址和端口号,创建确定数据内容、IP地址和端口号的数据报包,并通过socket.s
16、end(packet)将其发送给客户机,一、数据报式套接字,5、编程基本步骤,举例-1:TimeServer_UDP.java关键代码1.构造DatagramSocketDatagramSocket socket=new DatagramSocket(3000);2.构造接收数据报包byte buf=new byte256;DatagramPacket packet=new DatagramPacket(buf,buf.length);socket.receive(packet);,一、数据报式套接字,5、编程基本步骤,举例-1:TimeServer_UDP.java关键代码3.解析数据报包I
17、netAddress addr=packet.getAddress();int port=packet.getPort();,4.构造发送数据报包String date=new Date().toString();buf=date.getBytes();packet=new DatagramPacket(buf,buf.length,addr,port);socket.send(packet);,一、数据报式套接字,5、编程基本步骤,举例-1:TimeClient_UDP.java程序流程图,创建要发送的数据报包packet,以客户机的任意端口号创建DatagramSocket对象socket
18、socket.send(packet);将packet数据报包发送给服务器,创建接收的数据报包packet通过socket.receive(packet)从服务器接收数据报包,存放在packet中,通过packet.getData()方法从packet中解析出服务器发送过来的时间,并显示,关闭socket,一、数据报式套接字,5、编程基本步骤,举例-1:TimeClient_UDP.java关键代码1.构造socketDatagramSocket socket=new DatagramSocket();2.构造发送数据报包并发送DatagramPacket packet=new Datagra
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程 技术 第十
三一办公所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。




链接地址:https://www.31ppt.com/p-6016915.html