DatagramPacket类:该类的实例对象就相当于一个集装箱,用于封装UDP通信中发送或者接收的数据
构造方法:
DatagramPacket(byte[ ] buf , int length)构造DatagramPacket,用来接收长度为length的数据包
DatagramPacket(byte[ ] buf ,int.length , InetAddress address , int port)构造数据报包,用来将长度为length的包发送到指定主机上的指定端口
常用方法:
InerAddress getAddress() 返回某台机器的ip地址
int getPort() 返回某台主机的端口号
byte[ ] getData() 返回数据缓冲区
int getLength() 返回将要发送或者接收到的数据长度
DatagramSocket类:DatagramSocket类的作用就类似于码头,使用这个类的实例对象就可以发送和接收DatagramPacket数据包
构造方法:
DatagramSocket() 该构造方法用于创建发送端的DatagramSocket对象,在创建DatagramSocket对象时,并没有指定端口号,
此时,系统会分配一个没有被其它网络程序所使用的端口号
DatagramSocket(int port) 创建接收端的DatagramSocket对象时,必须要指定一个端口号
常用方法:
receive(DatagramPacket p) 接收数据包
send(DatagramPacket p) 发送数据包
代码展示:
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class UDPSend {
//发送端
public static void main(String[] args) throws IOException {
//创建Scoket对象
DatagramSocket ds=new DatagramSocket();
Scanner sc=new Scanner(System.in);
while(true){
//创建数据包对象,封装要发送的数据,明确接口端的IP和端口
byte[] bytes=sc.next().getBytes();
InetAddress inet=InetAddress.getByName("127.0.0.1");
DatagramPacket dp=new DatagramPacket(bytes,bytes.length,inet,6666);
//发送数据包对象
ds.send(dp);
}
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDPRecieve {
//接收端
public static void main(String[] args) throws IOException {
//创建字节数组接收数据
byte[] bytes=new byte[1024];
//创建socket对象明确端口号
DatagramSocket ds=new DatagramSocket(6666);
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+",端口号为"+port+",发送内容为:"+new String(bytes,0,length));
}
}
}