《Java网络编程(二).ppt》由会员分享,可在线阅读,更多相关《Java网络编程(二).ppt(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、公司公司徽标徽标JavaJava网络编程网络编程网络编程网络编程(二二二二)数据报通信数据报通信数据报通信数据报通信(UDP)(UDP)UDP协议是无连接的协议,它以数据报数据报作为数据传输的载体。数据报是一个在网络上发送的独立信息,它的到达、到达时间以及内容本身等都不能得到保证。数据报的大小是受限制的,每个数据报的大小限定在64KB以内。UDP协议无需在发送方和接收方建立连接无需在发送方和接收方建立连接,但也可以先建立连接。数据报在网上可以以任何可能的路径传往目的地。在Java中,基于UDP协议实现网络通信的类有三个:用于表达通信数据的数据报类DatagramPacket 用于进行端到端通信
2、的类DatagramSocket 用于广播通信的类MulticastSocket。点到点通信:类点到点通信:类点到点通信:类点到点通信:类DatagramSocketDatagramSocket构造方法publicDatagramSocket()publicDatagramSocket(intport)/在指定的端口通信在指定的端口通信publicDatagramSocket(intport,InetAddressladdr)/在指定的地在指定的地点运行点运行这三个方法都将抛出例外这三个方法都将抛出例外SocketException,程序中需要捕获处理。,程序中需要捕获处理。最主要的方法发送与
3、接收数据报publicvoidreceive(DatagramPacketp)publicvoidsend(DatagramPacketp)这两个方法都将抛出例外这两个方法都将抛出例外IOException,程序中需要捕获处理。,程序中需要捕获处理。其他方法publicvoidconnect(InetAddressaddress,intport)/与指定的机器与指定的机器通信,有连接通信,有连接publicvoiddisconnect()/关闭与指定机器的连接关闭与指定机器的连接publicvoidclose()/关闭关闭Socket点到点通信点到点通信点到点通信点到点通信发送端(服务器端)发
4、送端(服务器端)发出数据报的标准步骤:发出数据报的标准步骤:1.定义数据成员 DatagramSocket socket;DatagramPacket packet;InetAddress address;(用来存放接收方的地址)int port;(用来存放接收方的端口号)2.创建数据报Socket对象 try socket=new DatagramSocket(2876);catch(.SocketException e)socket 绑定到一个本地的可用端口,等待接收客户端的请求。数据报:类数据报:类数据报:类数据报:类DatagramPacketDatagramPacket构造方法pub
5、licDatagramPacket(bytebuf,intlength)publicDatagramPacket(bytebuf,intoffset,intlength)/这两个方法用于描述接收数这两个方法用于描述接收数据报据报publicDatagramPacket(bytebuf,intlength,InetAddressaddress,intport)publicDatagramPacket(bytebuf,intoffset,intlength,InetAddressaddress,intport)/这两个方法用于发送数据报这两个方法用于发送数据报 获取数据获取接收数据报接收数据报中的
6、信息publicInetAddressgetAddress()publicbytegetData()publicintgetLength()publicintgetOffset()publicintgetPort()设置数据设置发送数据报发送数据报中的信息setAddress(InetAddressiaddr)、setPort(intiport)、setData(bytebuf)、setData(bytebuf,intoffset,intlength)、setLength(intlength)点到点通信点到点通信点到点通信点到点通信3.分配并填写数据缓冲区(一个字节类型的数组)byte buf
7、=new byte256;存放从客户端接收的请求信息。4.创建一个接收数据报接收数据报DatagramPacketpacket=new DatagramPacket(buf,256);用来从socket接收数据,它只需要两个参数 5.服务器阻塞(等待接收数据)socket.receive(packet);在客户的请求数据报到来之前一直等待。点到点通信点到点通信点到点通信点到点通信从到来的接收数据报接收数据报中得到客户端的地址和端口号InetAddress address=packet.getAddress();int port=packet.getPort();7.准备需要发送的数据:将数据送
8、入缓冲区buf或来自文件、或键盘输入8.建立发送数据报发送数据报,用来从socket向客户端发送信息packet=new DatagramPacket(buf,buf.length,address,port);9.发送数据包 socket.send(packet);10.关闭socket socket.close();点到点通信点到点通信点到点通信点到点通信接收端(客户端)接收端(客户端)接收数据报的标准步骤:接收数据报的标准步骤:1.定义数据成员 int port;InetAddress address;DatagramSocket socket;DatagramPacket packet;
9、byte sendBuf=new byte256;2.建立socket socket=new DatagramSocket();无须指定端口号,它会自动获得一个可用的端口号。点到点通信点到点通信点到点通信点到点通信3.向服务器端发出请求数据报(发送数据报发送数据报)address=InetAddress.getByName(“localhost”);port=2876;/获得服务器端的IP和端口号 packet=new DatagramPacket(sendBuf,256,address,port);socket.send(packet);这个数据报本身会带有客户端的信息4.客户端等待服务器端
10、的应答(通过接收数据报接收数据报接收数据)packet=new DatagramPacket(sendBuf,256);socket.receive(packet);如果没有到就一直等待,因此实用程序要设置等待时间限度 5.处理接收到的数据 String received=new String(packet.getData(),0);System.out.println(received);multicast广播通信广播通信广播通信广播通信DatagramSocket只允许数据报发往一个目的地址。类包中提供了类MulticastSocket,允许将数据报以广播的方式发送到某个端口的所有客户。类
11、MulticastSocket是在客户端(接收端)使用,监听服务器端广播来的数据;而服务器端仍然使用DatagramSocket来发送数据,只是发送的数据报的目的地址有所变化。广播通信广播通信广播通信广播通信类类MulticastSocket:从:从DatagramSocket继承而来继承而来 构造方法publicMulticastSocket()publicMulticastSocket(intport):在指定的端口通信:在指定的端口通信这两个方法都将抛出例外这两个方法都将抛出例外IOException,程序中需要捕获处理。,程序中需要捕获处理。主要方法publicvoidjoinGrou
12、p(InetAddressmcastaddr):加入一个广播组:加入一个广播组publicvoidleaveGroup(InetAddressmcastaddr):离开一个广播组:离开一个广播组publicvoidsetTimeToLive(intttl):指定数据报离开时间:指定数据报离开时间publicvoidsend(DatagramPacketp,bytettl):在指定的时间内将数据报发送:在指定的时间内将数据报发送出去出去这四个方法都将抛出例外这四个方法都将抛出例外IOException,程序中需要捕获处理。,程序中需要捕获处理。继承DatagramSocket的方法publicv
13、oidreceive(DatagramPacketp):接收数据:接收数据publicvoidsend(DatagramPacketp):发送数据:发送数据publicvoidconnect(InetAddressaddress,intport):与指定的机器通信:与指定的机器通信publicvoiddisconnect():关闭指定的连接:关闭指定的连接publicvoidclose():关闭:关闭Socket广播通信广播通信MulticastSocket socket=new MulticastSocket(4446);InetAddress group=InetAddress.getByName(“224.0.0.1);socket.joinGroup(group);/receive datagramsocket.leaveGroup(group);socket.close();InetAddress group=InetAddress.getByName(“224.0.0.1);DatagramPacket packet=new DatagramPacket(buf,buf.length,group,4446);socket.send(packet);客户端客户端服务器端服务器端
限制150内