网络编程2-UDP编程(DatagramSocket)
1、传输层有两个协议,一个是tcp协议,另一个是udp协议,tcp协议通过socket编程。udp通过数据报编程。
UDP协议:
(1)将数据、源地址、目的地址 封装成数据包,不需要建立链接
(2)每个数据包限制在64K以内
(3)不可靠
(4)无需释放资源,速度快
2、(1)类DatagramSocket和DatagramPacket可实现udp编程
(2)DatagramPacket(数据包)里面装有,发送者地址,接收者地址,端口,和数据,DatagraSocket发送数据包
(3)系统不保证能否把数据送达目的地,也不一定什么时候到达
(4)数据包,有发送者接收者地址,所以发送前不用建立连接,不需要三次握手。
3、例子,注意事项在离子里面
package com.udp.test; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import org.junit.Test; public class TestUDP { private static String SERVER_HOST = "127.0.0.1"; //发送端(和socket的客户端注意区别) @Test public void send(){ //1、创建DatagramSocket对象 DatagramSocket ds = null; try { ds = new DatagramSocket(); //2、获取要传输的信息,创建数据包对象 byte [] b = "Hello I am UDP test".getBytes(); DatagramPacket dp = new DatagramPacket(b, 0, b.length,InetAddress.getByName(SERVER_HOST),8090); //3、发送数据包 ds.send(dp); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //4、关闭socket连接 if(ds != null){ ds.close(); } } } //接受端(和socket的服务端区别) @Test public void receive(){ //1、创建DatagramSocket对像 DatagramSocket ds = null; try { ds = new DatagramSocket(8090); //2、创建数据包对象 byte [] b = new byte[64]; DatagramPacket dp = new DatagramPacket(b,0,b.length); //3、接收 ds.receive(dp); //4、存到字符串dp.getData()方法 String str = new String(dp.getData(),0,dp.getData().length); System.out.println(str); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //5、关闭ds if(ds != null ){ ds.close(); } } } }