网络编程(2)—UDP
1.UDP协议:
- 将数据、源、目的封装成数据包,不需要建立连接
- 每个数据包大小在64K一下
- 因无需建立连接,所以是不可靠的
- 发送完毕,无需释放资源,速度快
2.UDP编程步骤:
- 发送端:
- 1.创建发送端对象(new DatagramSocket())
- 2.准备要发送的数据,创建一个字符串转化为字节数组
- 3.创建数据报对象(DatagramPacket pack = new DatagramPacket(b,0,b.length,
- InetAddress.getByName(“127.0.0.1”),9090);)
- 4.发送端对象.调用send()函数发送数据报
- 5.关闭连接资源
- 接收端:
- 1.创建接收端对象(DatagramSocket(9090))
- 2.同样的创建一个数据报(new DatagramPacket(b ,0 ,b.length))
- 3.接收端对象.调用receive()函数,使用数据报接受数据
- 4.写入到字符串中
- 5.输出字符串
- 6.关闭连接资源
3.实例:
public class TestUDP {
//发送端
@Test
public void send(){
//1.UDPSoclet对象
DatagramSocket ds = null;
try {
ds = new DatagramSocket();
//2.要发送的数据
byte[] b = "我是要发送的数据".getBytes();
//3.创建数据报:每个数据报不能大于64K,其中记录着数据信息、发送端的IP、端口号以及接受端的IP和端口号
DatagramPacket pack = new DatagramPacket(b,0,b.length,
InetAddress.getByName("127.0.0.1"),9090);
//4.发送
ds.send(pack);
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(ds != null){
//关闭资源
ds.close();
}
}
}
//接收端
@Test
public void receive(){
//1.接收端对象
DatagramSocket ds = null;
try {
ds = new DatagramSocket(9090);
byte[] b = new byte[1024];
//2.通过数据报接受数据
DatagramPacket pack = new DatagramPacket(b ,0 ,b.length);
//3.接收
ds.receive(pack);
//4.写入到字符串中
String str = new String(pack.getData(), 0, pack.getLength());
//5.输出字符串
System.out.println(str);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(ds != null){
//关闭资源
ds.close();
}
}
}
}