DatagramSocket此类表示用于发送和接收数据报数据包的套接字。
DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造一个数据包,发送长度为 length的数据包到指定主机上的指定端口号。
DatagramPacket包括指示要发送的数据,其长度,远程主机的IP地址和远程主机上的端口号的信息。
public class SendDemo {
public static void main(String[] args) throws IOException {
//创建发送端Socket对象
DatagramSocket ds = new DatagramSocket();
//创建数据,并把数据打包
//数据包
byte[] bys="hello,UDP".getBytes();
//长度
int length=bys.length;
//IP地址对象,可以用主机名
InetAddress address=InetAddress.getByName("biao");
//端口号
int port=10086;
DatagramPacket dp=new DatagramPacket(bys,length,address,port);
//调用Socket对象的发送方法发送数据包
//void send(DatagramPacket p) 从此套接字发送数据包。
ds.send(dp);
//释放资源
ds.close();
}
}
void receive(DatagramPacket p) 从此套接字接收数据报包。
DatagramSocket(int port) 构造数据报套接字并将其绑定到本地主机上的指定端口。
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
//创建发送端Socket对象
//构造数据报套接字并将其绑定到本地主机上的指定端口。
DatagramSocket ds=new DatagramSocket(10086);
//创建一个数据包(接收容器)
byte[] bys=new byte[1024];
int length=bys.length;
DatagramPacket dp=new DatagramPacket(bys,length);
//调用Socket对象的接收数据方法
ds.receive(dp);
//解析数据,并显示在控制台
InetAddress add=dp.getAddress();
//获取数据
byte[] bys2=dp.getData();
//获取数据包的长度
int len=dp.getLength();
//截取字符串
String s=new String(bys2,0,len);
System.out.println(add+"发过来:"+s);
//释放资源
ds.close();
}
}
优化:
发送
public class FaSong {
public static void main(String[] args) throws IOException {
//创建发送端Socket对象
DatagramSocket ds = new DatagramSocket();
//键盘录入
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line=null;
while ((line=br.readLine())!=null) {
byte[] bys = line.getBytes();
DatagramPacket dp = new DatagramPacket(bys, //数据
bys.length, //数据包的长度
InetAddress.getByName("biao"), //地址,主机名也行
8080); //端口
ds.send(dp);
}
ds.close();
}
}
接收
public class JieShou {
public static void main(String[] args) throws IOException {
DatagramSocket ds=new DatagramSocket(8080);
while (true) {
//数据包
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys, bys.length);
//接收
ds.receive(dp);
//获取IP
InetAddress ip = dp.getAddress();
String s = new String(dp.getData(), 0, dp.getLength());
System.out.println(ip + "发来:" + s);
}
}
}