发送数据思路:
1.创建Socket对象
2.将待发送数据打包
3.通过Socket对象方法经由端口发送数据包
4.释放资源
接收数据思路:
1.创建对应发送端口的Socket对象
2.创建容器作为数据包的接收对象
3.通过Socket对象方法接收数据包
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!