JAVA实现收发UDP请求
😂 这篇文章最后更新于1186天前,您需要注意相关的内容是否还可用。
Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。
发送
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/*
* 实现UDP协议的发送端:
* 实现封装数据的类 java.net.DatagramPacket 将你的数据包装
* 实现数据传输类 java.net.DatagramSocket 将数据包发出去
*
* 实现步骤:
* 1.创建DatagramPacket对象,封装数据,接收的地址和端口
* 2.创建DatagramSocket对象,
* 3.调用DatagramSocket类的方法send,发送数据包
* 4.关闭资源
*
* DatagramPacket构造方法:
* DatagramPacket(byte[] buf,int length,InetAddress address,int port)
*
* DatagramSocket构造方法:
* DatagramSocket()空参数
* 方法:send(DatagramPacket d)
*
*
*/
public class UDPSendTest {
public static void main(String[] args) throws Exception {
//创建发送端Socket对象
DatagramSocket ds = new DatagramSocket();
//创建数据并打包
String s = "My name is happywindman";
byte[] bytes = s.getBytes();
int length = s.length();
InetAddress ip = InetAddress.getByName("127.0.0.1");//根据自己主机的ip地址或者主机名
int port = 10086;
DatagramPacket dp = new DatagramPacket(bytes, length, ip, port);
//发送数据
ds.send(dp);
//释放资源
ds.close();
}
}
接收
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/*
* 实现UDP接收端
* 实现封装数据包java.net.DatagramPacket 将数据接收
* 实现输出传输 java.net.DatagramSocket 接受数据包
*
* 实现步骤:
* 1.创建DatagramSocket对象,绑定端口号
* 要和发送数据端口号一致
* 2.创建字节数组,接受发来的数组
* 3.创建数据包对象DatagramPacket
* 4.调用DatagramSocket对象方法 receive(DatagramPacket dp)
* 接受数据,数据放在数据包中
* 5.拆包
* 发送的IP地址
* 数据包对象DatagramPacket()方法getAddress()获取的是发送端的IP地址对象
* 接受到的字节个数
* 数据包对象DatagramPacket()方法getLength()
* 发送方的端口号
* 数据包对象DatagramPacket()方法getPort()
* 6.关闭资源
*/
public class UDPReceiveTest {
public static void main(String[] args) throws Exception {
//创建接收端Socket对象
DatagramSocket ds = new DatagramSocket(10086);
//接收数据
byte[] bytes = new byte[1024];
int length = bytes.length;
DatagramPacket dp = new DatagramPacket(bytes, length);
ds.receive(dp);
//解析数据 获取地址 带斜杠
InetAddress address = dp.getAddress();
//获取发送端的IP地址对象
String ip = address.getHostAddress();
//获取发送的端口号
int port = dp.getPort();
byte[] data = dp.getData();
int len = dp.getLength();
//输出数据
// System.out.println(address);
System.out.println(String.format("发送方地址:%s:%s", ip, port));
System.out.println(new String(data, 0, len));
System.out.println(new String(bytes, 0, len));
ds.close();
}
}
留言评论
暂无留言