java网络编程day03
UDP编程
- 没有明确的服务器端和客户端,眼变成数据的发送端和接受端
- 数据接受和发送是通过DatagramPacket对象(包含数据ip和端口)完成的
- 将数据封装成DaragramPacket对象传输(装包/拆包)
- 可以指定在哪个端口接受数据
完成功能:B给A发送今晚吃火锅吗?A回好的!
操作步骤:
- 创建一个DatagramSocket对象,在xxxx端口接受数据
- 构建一个DatagramPacket对象,作为数据传输对象
- 调用socket.receive(packet)和socket.send(packet)方法,将数据传到DatagramPacket对象packer中,或者将数据接收到packet中
- 可以用过packet.getData(),packet.getLength()方法将数据包拆包
public class UDPReceiverA {
public static void main(String[] args) throws IOException {
//创建一个DatagramSocket对象,在9999端口接受数据
DatagramSocket socket = new DatagramSocket(9999);
//构建一个DatagramPacket对象
//在前面讲UDP协议时将过,UDP协议数据传输每个数据包最大64k
byte[] buf = new byte[64];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
//调用方法,将通过网络传输的Datagrampacket对象填充到packet对象中
//当有数据包发送到9999端口是就会接受到数据到packet中,如果没有数据,就会等待阻塞在这,一直等
System.out.println("等待接受数据");
socket.receive(packet);
System.out.println("已接收到数据");
//可以吧packet进行拆包,取出数据,并显示
int length = packet.getLength();//实际接收到的长度
byte[] data = packet.getData();//接受到的数据
System.out.println("接收到的内容为:——————————————————》" + new String(data, 0, length));
byte[] d = "好的`````".getBytes();
DatagramPacket packet1 = new DatagramPacket(d, 0, d.length, InetAddress.getLocalHost(), 9998);
socket.send(packet1);
System.out.println("A端退出");
}
}
public class UDPSenderB {
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象,准备在9998端口,接受数据
DatagramSocket socket = new DatagramSocket(9998);
//将需要接受的数据封装到DatagramPacket对象中
byte[] data = "hello world".getBytes();
//对方主机ip,数据数组,数组长度
DatagramPacket packet = new DatagramPacket(data, data.length,InetAddress.getLocalHost(), 9999);
socket.send(packet);
//下面开始接受数据
socket.receive(packet);
int length = packet.getLength();
byte[] data1 = packet.getData();
System.out.println(new String(data1, 0, length));
socket.close();
System.out.println("B端退出");
}
}