Java网络编程之UDP
一、C/S架构中UDP网络通信流程
①创建DatagramSocket与DatagramPacket对象
②建立发送端,接收端
③建立数据包
④调用Socket的发送、接收方法
⑤关闭Socket
注意:发送端与接收端是两个独立的运行程序,在接收端需要指定监听的端口
基本的流程如下图所示
在Java中类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序。
UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。
DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。
UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接
基于java平台的UDP编程,上图改造如下:
二、示例分析
1 package me.net.socket; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.InetAddress; 7 import java.net.SocketException; 8 import java.net.UnknownHostException; 9 10 import org.junit.Test; 11 12 /** 13 * UDP编程 14 * @author Administrator 15 * 16 */ 17 public class TestUDP { 18 19 /** 20 * 发送端 21 */ 22 @Test 23 public void send() { 24 DatagramSocket ds = null; 25 DatagramPacket pack = null; 26 try { 27 ds = new DatagramSocket(); 28 byte[] buf = "你好,我是要发送的数据".getBytes(); 29 // 创建一个数据报,每个数据包都不能大于64k,都记录者信息,发送端的ip,端口号,以及接收端的ip和端口号 30 pack = new DatagramPacket(buf, 0, buf.length, InetAddress.getByName("localhost"), 9099); 31 ds.send(pack); 32 } catch (SocketException e) { 33 e.printStackTrace(); 34 } catch (UnknownHostException e) { 35 e.printStackTrace(); 36 } catch (IOException e) { 37 e.printStackTrace(); 38 } finally { 39 if (ds != null) { 40 ds.close(); 41 } 42 } 43 } 44 45 /** 46 * 接收端 47 */ 48 @Test 49 public void receive() { 50 DatagramSocket ds = null; 51 DatagramPacket pack = null; 52 try { 53 ds = new DatagramSocket(9099); 54 byte[] buf = new byte[1024]; 55 pack = new DatagramPacket(buf, 0, buf.length); 56 ds.receive(pack); 57 String str = new String(pack.getData(), 0, pack.getLength()); 58 System.out.println(str); 59 } catch (IOException e) { 60 e.printStackTrace(); 61 } finally { 62 if (ds != null) { 63 ds.close(); 64 } 65 } 66 } 67 }
如果,您对我的这篇博文有什么疑问,欢迎评论区留言,大家互相讨论学习。
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
如果,您对我的博文感兴趣,可以关注我的后续博客,我是【AlbertRui】。转载请注明出处和链接地址,欢迎转载,谢谢!