UDP通信
接收端不需要明确知道数据的来源,只需要接收到数据即可
发送数据时必须指定接收端的IP地址和端口号,就好像发送货物的集装箱上面必须标明接收人的地址一样
* 发送端
* 1,创建DatagramPacket对象,封装数据,接收的地址和端口
* 2,创建DatagramSocket对象
* 3,调用DatagramSocket中的send方法,发送数据包
* 4,关闭资源DatagramSocket
package com.oracle.demo01;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.security.spec.DSAGenParameterSpec;
import java.util.Scanner;
public class UDPSend {
public static void main(String[] args) throws IOException {
Scanner sc=new Scanner(System.in);
//封装ip地址
InetAddress inet=InetAddress.getByName("127.0.0.1");
//创建快递公司对象
DatagramSocket ds=new DatagramSocket();
while (true) {
//创建打包对象,封装要发送的数据、接收端的ip地址极端口号
//封装数据
byte[]bytes=sc.next().getBytes();
DatagramPacket dp=new DatagramPacket(bytes,bytes.length,inet,8888);
//发送数据
ds.send(dp);
//释放资源
//ds.close();
}
}
}
UDP接收端
*
* 1,创建DatagramSocket对象,绑定端口号(要和发送端端口号一致)
* 2,创建字节数组,接收发来的数据
* 3,创建数据包对象DatagramPacket
* 4,调用DatagramSocket对象方法receive(DatagramPacket dp)接收数据,数据放在数据包中
* 5,拆包
发送的IP地址
数据包对象DatagramPacket方法getAddress()获取的是发送端的IP地址对象
返回值是InetAddress对象
接收到的字节个数
数据包对象DatagramPacket方法getLength()
发送方的端口号
数据包对象DatagramPacket方法getPort()发送端口
* 6,关闭资源
package com.oracle.demo01;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDPRecieve {
// UDP接收端
public static void main(String[] args) throws IOException {
// 创建快递公司,名确端口号
DatagramSocket ds = new DatagramSocket(8888);
// 创建字节数组来接收数据
byte bytes[] = new byte[1024];
while (true) {
// 创建打包对象,接收包
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
// 接收数据包
ds.receive(dp);
// 拆包
// 获取字节长度
int length = dp.getLength();
// 获取发送端ip地址
String ip = dp.getAddress().getHostAddress();
// 获取端口号
int port = dp.getPort();
System.out.println("ip地址为:" + ip + "\t端口号为" + port + "\t得人发送的内容为" + new String(bytes, 0, length));
// 释放资源
// ds.close();
}
}
}
浙公网安备 33010602011771号