在查看本文前 您可以先看看我的文章
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构造方法 去拿到所有有内容的部分 那么 我们按刚才的逻辑 再来一次
就没有任何问题了