UDP通信案例:实现收发数据
UDP协议的特点
- 面向无连接的协议
- 发送端只管发送,不确认对方是否能收到。
- 基于数据包进行数据传输。
- 发送数据的大小限制64K以内
- 因为面向无连接,速度快,但是不可靠。
UDP协议的使用场景
-
即时通讯
-
在线视频
-
网络语音电话
UDP协议相关的两个类
* DatagramPacket
- 数据包对象
- 作用:用来封装要发送或要接收的数据,比如:集装箱
* DategramSocket
- 发送对象
- 作用:用来发送或接收数据包,比如:码头
DatagramPacket类构造方法
* DatagramPacket(byte[] buf, int length, InetAddress address, int port)
-
创建发送端数据包对象
-
buf:要发送的内容,字节数组
-
length:要发送内容的长度,单位是字节
-
address:接收端的IP地址对象
-
port:接收端的端口号
DatagramPacket(byte[] buf, int length)
-
创建接收端的数据包对象
-
buf:用来存储接收到内容
-
length:能够接收内容的长度
DatagramPacket类常用方法
* int getLength() 获得实际接收到的字节个数
DatagramSocket类构造方法
* DatagramSocket() 创建发送端的Socket对象,系统会随机分配一个端口号。
* DatagramSocket(int port) 创建接收端的Socket对象并指定端口号
DatagramSocket类成员方法
* void send(DatagramPacket dp) 发送数据包
* void receive(DatagramPacket p) 接收数据包
发送者:
package com.liqiliang.demo02_实现收发数据;
import java.io.IOException;
import java.net.*;
//发送端
public class Sender {
public static void main(String[] args) throws IOException {
//1.封装要发送的数据:DatagramPacket
//发送的信息
byte[] msg ="你好我叫吴宇豪,我是傻X!".getBytes();
//发送给自己电脑
InetAddress localHost = InetAddress.getLocalHost();
//发送给别人电脑
InetAddress otherHost = InetAddress.getByName("192.168.37.14");
//端口号
int port = 8888;
DatagramPacket dp=
new DatagramPacket(msg,msg.length,otherHost,8888);
//2.创建码头,发送数据:DatagramSocket
DatagramSocket ds = new DatagramSocket();
System.out.println("准备发送数据");
ds.send(dp);
System.out.println("发送数据完毕");
}
}
接收者:
package com.liqiliang.demo02_实现收发数据;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Receiver {
public static void main(String[] args) throws IOException {
//1.准备一个空集装箱接收数据:DatagramPacket
byte[] buff = new byte[1024];
DatagramPacket dp = new DatagramPacket(buff,buff.length);
//2.定义码头,接收对方发送的数据:DatagramSocket
DatagramSocket ds = new DatagramSocket(8888);
System.out.println("准备好接收信息了");
ds.receive(dp);
System.out.println("接收信息完毕........");
int len = dp.getLength();
//将收到的有效数据进行打印
System.out.println(new String(buff,0,len));
}
}