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!

猜你喜欢

转载自blog.csdn.net/g28_gwf/article/details/80427777
今日推荐