Java实现最简单的本机UDP协议发送接收数据

发送数据思路:
1.创建Socket对象
2.将待发送数据打包
3.通过Socket对象方法经由端口发送数据包
4.释放资源

接收数据思路:
1.创建对应发送端口的Socket对象
2.创建容器作为数据包的接收对象
3.通过Socket对象方法接收数据包

4.释放资源

构造方法:

DatagramSocket()        //构造数据报套接字并将其绑定到本地主机上任何可用的端口。
DatagramSocket(int port)        //创建数据报套接字并将其绑定到本地主机上的指定端口。
DatagramPacket(byte[] buf, int length)        //构造 DatagramPacket,用来接收长度为 length 的数据包。
DatagramPacket(byte[] buf, int length, InetAddress address, int port)        //构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

代码:

SendDemo.java

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class SendDemo {

	public static void main(String[] args) throws IOException {
		DatagramSocket ds = new DatagramSocket();
		
		byte[] buf = "hello, UDP!".getBytes();
		int length = buf.length;
		InetAddress address = InetAddress.getByName("LAPTOP-7U1V2D6Q");
		int port = 10000;
		DatagramPacket dp = new DatagramPacket(buf, length, address, port);
		
		ds.send(dp);
		ds.close();
	}

}

ReceiveDemo.java

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class ReceiveDemo {

	public static void main(String[] args) throws IOException {
		DatagramSocket ds = new DatagramSocket(10000);
		
		byte[] buf = new byte[1000];
		int length = buf.length;
		DatagramPacket dp = new DatagramPacket(buf, length);
		
		ds.receive(dp);
		InetAddress address = dp.getAddress();
		byte[] data = dp.getData();
		System.out.println(address.getHostAddress() + "--------" + new String(data, 0, data.length));
		
		ds.close();
	}

}

DatagramSocket中receive()方法在接收到数据报前一直阻塞,在收到数据后才会继续运行。

需要先开启接收再发送。

运行结果:

在ReceiveDemo控制台中:

192.168.23.1--------hello, UDP!

Java实现UDP的数据接收发送可以通过Java的DatagramSocket类来实现。以下是一个简单的示例代码: 数据发送: ```java try { // 创建DatagramSocket对象 DatagramSocket datagramSocket = new DatagramSocket(); // 要发送的数据 String data = "Hello, world!"; byte[] bytes = data.getBytes(); // 创建DatagramPacket对象,指定数据、数据长度、地址和端口号 DatagramPacket packet = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("127.0.0.1"), 8888); // 发送数据 datagramSocket.send(packet); } catch (IOException e) { e.printStackTrace(); } ``` 数据接收: ```java try { // 创建DatagramSocket对象并指定端口号 DatagramSocket datagramSocket = new DatagramSocket(8888); // 创建一个字节数组用于接收数据 byte[] bytes = new byte[1024]; // 创建DatagramPacket对象,指定数据和数据长度 DatagramPacket packet = new DatagramPacket(bytes, bytes.length); // 接收数据 datagramSocket.receive(packet); // 处理接收到的数据 String data = new String(packet.getData(), 0, packet.getLength()); System.out.println("接收到的数据:" + data); } catch (IOException e) { e.printStackTrace(); } ``` 在上述代码中,通过DatagramSocket类创建了一个UDP的Socket,可以指定发送接收的数据,以及目标地址和端口号。在发送数据时,通过DatagramPacket类创建了一个数据包,将数据、数据长度、地址和端口号都封装进去,然后通过DatagramSocket的send方法将数据包发送出去。在接收数据时,也是通过DatagramPacket类创建一个数据包,然后通过DatagramSocket的receive方法接收数据包,最后通过getData方法获取数据并进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值