java 25 - 4 网络编程之 UDP协议传输思路

UDP传输

两个类:DatagramSocket与DatagramPacket(具体看API)

  A:建立发送端,接收端。

  B:建立数据包。

  C:调用Socket的发送接收方法。

  D:关闭Socket。

  E:发送端与接收端是两个独立的运行程序。

 

UDP传输-发送端思路

  UDP发送数据:
    A:创建Socket发送端对象
    B:创建数据报包(把数据打包)
    C:调用Socket对象发送数据报包
    D:释放资源(底层是IO流)

 

UDP传输-发送端代码

 1 public static void main(String[] args) throws IOException {
 2         // A:创建发送端Socket对象
 3         // DatagramSocket():此类表示用来发送和接收数据报包的套接字。
 4         DatagramSocket ds = new DatagramSocket();
 5         
 6         // B:创建数据,并把数据打包
 7         // DatagramPacket(byte[] buf, int length, InetAddress address, int port)
 8         // 创建数据
 9         byte[] bys = "UDP发送端".getBytes();
10         // 数据长度
11         int length = bys.length;
12         
13         // 创建IP地址对象
14         InetAddress address = InetAddress.getByName("172.19.xx.xx");
15         
16         // 创建端口
17         int port = 10010;
18         
19         //把数据进行打包
20         DatagramPacket dp = new DatagramPacket(bys,length,address,port);
21         
22         // C:调用Socket对象的发送方法发送数据包
23         // public void send(DatagramPacket p) 数据报包用来实现无连接包投递服务
24         ds.send(dp);
25         
26         //D:释放资源
27         ds.close();
28     }
29 
30 }

 

UDP传输-接收端思路

  UDP接收数据:
    A:创建Socket接收端对象
    B:创建一个数据报包来接收数据(创建容器)
    C:调用Socket对象的方法来接收数据报包
    D:解析数据包(byte转换成String),并打印在控制台
    E:释放资源

 

UDP传输-接收端代码

 

 1 public class ReceiveDemo {
 2     public static void main(String[] args) throws IOException {
 3         // 创建接收端Socket对象
 4         // DatagramSocket(int port)
 5         DatagramSocket ds = new DatagramSocket(10010);
 6 
 7         // 创建一个数据包(接收容器)
 8         // DatagramPacket(byte[] buf, int length)
 9         byte[] bys = new byte[1000];
10         int length = bys.length;
11         DatagramPacket dp = new DatagramPacket(bys, length);
12 
13         // 调用Socket对象的接收方法接收数据
14         // public void receive(DatagramPacket p)
15         ds.receive(dp); // 阻塞式
16 
17         // 解析数据包,并显示在控制台
18         // 获取对方的ip
19         // public InetAddress getAddress()
20         InetAddress address = dp.getAddress();
21         String ip = address.getHostAddress();
22         // public byte[] getData():获取数据缓冲区
23         // public int getLength():获取数据的实际长度
24         byte[] bys2 = dp.getData();
25         int len = dp.getLength();
26         String s = new String(bys2, 0, len);
27         System.out.println(ip + "传递的数据是:" + s);
28 
29         // 释放资源
30         ds.close();
31     }
32 }

 

注意:因为UDP接收端是阻塞式接收,所以先启动接收端,再启动发送端。

 

UDP协议发送和接收数据的图解:

posted @ 2016-10-14 20:00  卡拉瓦  阅读(286)  评论(0编辑  收藏  举报