基本知识
UDP基于广播数据报的传输协议。
UDP编程,在java中主要用到的类
1. java.net.DatagrmSocket:客户端/服务端,负责发送或者接收报文。
2. java.net.DatagrmPacket:数据报
3. UDP编程并有没客户端和服务端一说,谁都可以做客户端/服务端。
192.168.10.255 , 255是广播地址,在192.168.10网段中所有人都会接收到数据。
UDP程序示例
发送数据工程程序
public class DataSender {
public static void main(String[] args) throws IOException {
//用于发送广播的socket
DatagramSocket socket = new DatagramSocket();
//发送的数据
String str = "Hello world";
//目标电脑 InetSocketAddress是SocketAddress的子类
InetSocketAddress target = new InetSocketAddress("192.168.1.100", 6789);
byte[] b = str.getBytes();
//数据报
DatagramPacket packet = new DatagramPacket(b, 0, b.length, target);
//发送数据报
socket.send(packet);
System.out.println("数据发送完成......");
socket.close();
}
}
接收数据工程
public class DataReceive {
public static void main(String[] args) throws IOException {
//在本机监听6789端口
DatagramSocket socket = new DatagramSocket(6789);
//用于接收数据报
byte[] buf = new byte[1024];
//数据报
DatagramPacket packet = new DatagramPacket(buf, buf.length);
//接收数据
socket.receive(packet);
//将byte数据转为字符串
String str = new String(buf, 0, packet.getLength());
System.out.println("接收到的数据是: " + str);
}
}
一定要先执行接收端程序,再执行发送端程序,因为UDP网络编程是广播形式发送数据,就是发送端执行到send()方法时,就把数据广播出去了,至于你接不接收,发送端是不管的,所有只有先执行接收端程序,让其等待广播才能对数据进行接收。