在查看本文前 您可以先看看我的文章
java UDP通信程序DatagramSocket数据发送 对UDP有一个基本的了解
然后这里我们就直接看代码了
我们先创建一个包 包下创建两个类 分别是
sendOut 发送类
参考代码如下
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class sendOut {
public static void main(String args[]) throws IOException {
//通过 DatagramSocket 类创建一个发送端的对象
DatagramSocket ds = new DatagramSocket();
byte[] data = "Hello World".getBytes();
InetAddress addIp = InetAddress.getByName("ip地址");
DatagramPacket dp = new DatagramPacket(data,data.length,addIp,6800);
ds.send(dp);
ds.close();
}
}
sendOut 作为发送数据的端 会将数据发给接收端
注意 如果你是在和自己对接 这里的ip必须是你自己的 如果你是在和别人一起做 就可以写别人的电脑ip
然后 receive 数据接收类
参考代码如下
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class receive {
public static void main(String args[]) throws IOException {
//通过DatagramSocket类创建接收数据对象 指定了端口
DatagramSocket ds = new DatagramSocket(6800);
//定义一个字节数组 用于定义数据容量
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys,bys.length);
//通过DatagramSocket创建的接收数据对象 接收数据
ds.receive(dp);
//利用字节数据接收数据
byte[] data = dp.getData();
//将字节数据转为字符串
String datacon = new String(data);
//输出接收到的数据
System.out.println(datacon);
//关闭接收端
ds.close();
}
}
注意这里的端口 必须和你发送端写的是一样的 因为如果你端口写的不一样 他也会找不到的
然后我们先运行 receive 接收端
没有任何反应 但跑起来了然后我们运行sendOut发送端
也没有任何反应 但这是我们再去看接收端
很显然 数据是拿到了 但后面多出来很多奇奇怪怪的东西
这就涉及到 我们设置的容量 我们给的 1024 但确实我们压根不用那么多 我们就几个字 所以 这里我们要处理一下
我们将 receive类的 main方法修改成如下内容
public static void main(String args[]) throws IOException {
//通过DatagramSocket类创建接收数据对象 指定了端口
DatagramSocket ds = new DatagramSocket(6800);
//定义一个字节数组 用于定义数据容量
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys,bys.length);
//通过DatagramSocket创建的接收数据对象 接收数据
ds.receive(dp);
//利用字节数据接收数据
byte[] data = dp.getData();
//获取传来的数据数据长度
int len = dp.getLength();
//将字节数据转为字符串
String datacon = new String(data,0,len);
//输出接收到的数据
System.out.println(datacon);
//关闭接收端
ds.close();
}
这里 我们通过 getLength 拿了一下 发送端发送的数据的实际长度
然后通过 String构造方法 去拿到所有有内容的部分 那么 我们按刚才的逻辑 再来一次
就没有任何问题了