UDP
将数据及源和目的封装成数据包中,不需要建立连接。
每个数据包的大小在限制在64K内。
因无连接,是不可靠协议。
不需要建立连接,速度快。
UDP发送数据。
/*
* 需求:通过udp传输方式,将一段文字数据发送出去。
* 思路:
* 1、建立udpsocket服务。
* 2、提供数据,并将数据封装到数据包中。
* 3、通过socket服务的发送功能,将数据包发出去。
* 4、关闭资源
*
* */
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDP_OUT_Demo {
public static void main(String[] args) throws Exception {
//1、创建udp服务。通过DatagramSocket对象。
DatagramSocket ds = new DatagramSocket();
//2、确定数据,并封装成数据包。DatagramPacket(byte[] buf,int length,InetAddress address,int port)
byte[] buf = "hello UDP".getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("localhost"), 8888);
//3、通过socket服务,将已有的数据包发送出去。通过send方法。
ds.send(dp);
//4、关闭资源
ds.close();
}
}
UDP接收数据。
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/*
* 需求:定义应用程序,用于接收udp协议传输的数据并处理。
*
* 思路:
* 1、定义udpsocket服务。
* 2、定义一个数据包,因为要存储接收到的字节数据。
* 因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。
* 3、通过socket服务的receive方法将收到的数据存入一定以好的数据包中。
* 4、通过数据包对象的特有功能。将这些不同的数据取出。打印在控制台上。
* 5、关闭资源。
*
* */
public class UDP_IN_Demo {
public static void main(String[] args) throws IOException {
// 1、创建udpsocket,建立端点。
DatagramSocket ds = new DatagramSocket(8888);
// 2、定义数据包,用于存储数据。
byte[] data = new byte[1024];
DatagramPacket dp = new DatagramPacket(data, data.length);
// 3、通过服务的receive方法将收到数据存储入数据包中。
ds.receive(dp);
// 4、通过数据包的方法获取其中的数据。
String ip = dp.getAddress().getHostAddress();
String datas = new String(dp.getData(), 0, dp.getLength());
int port = dp.getPort();
System.out.println(ip + ":" + datas + ":" + port);
// 5、关闭资源
ds.close();
}
}