您的位置:首页 > 理论基础 > 计算机网络

Java网络编程之UDP协议数据传输

2020-03-08 14:24 1531 查看

一、UDP数据传输方式

数据传递采用数据包方式传递,所有的数据要进行打包操作,并且没有对应的客户端服务器概念,有且只有发送段和接收端。

Socket 套接字
数据需要进行传递操作,在数据传递的两台计算机当中必须有对应的Socket。这里采用UDP协议,那么必须有一个UDP协议的Socket

DatagramSocket();
创建一个发送端UDP协议Socket对象
DatagramSocket(int port);
创建一个接收端UDP协议的Socket对象,这里需要【监听】指定端口

发送端数据包的打包方法:

DatagramPacket DatagramPacket(byte[] buf, int length, InetAddress address, int port);
buf: 需要传递数据的字节数组
length:是当前字节数组中数据容量字节数
address:接收端IP地址对象
port: 接收端对应的端口号

接收端数据包接收方式,需要准备一个空的数据包

DatagramPacket DatagramPacket(byte[] buf, int length);
buf: 字节缓冲数组,通常是1024整数倍
length: 当前字节缓冲数组的容量

二、发送端

1、流程
1. 创建UDP服务器对应的发送端Socket
2. 准备对应数据包,需要带有指定数据
3. 发送数据 send
4. 关闭UDP发送端
2、代码
public class SenderDemo {
public static void main(String[] args) throws IOException {
System.out.println("发送端启动");
// 创建对应的Socket
DatagramSocket socket = new DatagramSocket();

// 准备数据包
byte[] bytes = "来自发送端的数据".getBytes();
DatagramPacket packet = new DatagramPacket(bytes, bytes.length,
InetAddress.getLocalHost(), 8848);

// 发送数据包
socket.send(packet);

// 关闭UDP发送端
socket.close();
}
}

三、接收端

1、流程
1. 打开UDP服务,并且监听指定端口
2. 创建新的空数据包
3. 通过Socket接收数据
4. 关闭UDP服务接收端
2、代码
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
// 创建Socket监听端口
DatagramSocket socket = new DatagramSocket(8848);

// 准备空数据包
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);

// 接收数据
socket.receive(packet);

// 确定接收到的字节长度
int length = packet.getLength();

System.out.println(new String(buf, 0, length));

// 关闭socket
socket.close();
}
}

四、UDP数据传递丢失问题

当使用UDP协议进行数据传递时,有可能在传递内容较大时发生数据丢失的问题。发生这种情况的原因有很多,例如:

  1. 网络不够好,稳定性不行,带宽不够
  2. 电脑性能不好
  • 点赞 3
  • 收藏
  • 分享
  • 文章举报
Betterman_QS 发布了14 篇原创文章 · 获赞 27 · 访问量 1万+ 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: