1、发送Send
- 创建DatagramSocket, 随机端口号
- 创建DatagramPacket, 指定数据, 长度, 地址, 端口
- 使用DatagramSocket发送DatagramPacket
- 关闭DatagramSocket
2、接收端Receive
- 创建DatagramSocket, 指定端口号
- 创建DatagramPacket, 指定数组, 长度
- 使用DatagramSocket接收DatagramPacket
- 关闭DatagramSocket
- 从DatagramPacket中获取数据
3、接收方获取ip和端口号
- String ip = packet.getAddress().getHostAddress();
- int port = packet.getPort();
4、发送端代码实现:
public static void main(String[] args) throws Exception {
//确定要发送的内容
String str = "你愿意跟我一起去吃麻辣烫吗?";
//创建发送端Socket 可以ip ,会提供一个随机的
DatagramSocket socket = new DatagramSocket();
//创建装载数据的包 要指明IP地址,端口号,
DatagramPacket packet = new DatagramPacket(str.getBytes(), str.getBytes().length,
InetAddress.getByName("127.0.0.1"), 6666);
//发送数据
socket.send(packet);
//关闭socket
socket.close();
}
5、接收端代码实现:
public static void main(String[] args) throws Exception {
//创建接收端Socket,必须指定端口,不然接收不到
DatagramSocket socket = new DatagramSocket(6666);
//创建装载数据的包
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
//接收数据, 阻塞方法
socket.receive(packet);
//获取接收到的数据
byte[] bs = packet.getData();
//获取接收到的有效数据的长度
int len = packet.getLength();
System.out.println(new String(bs,0,len));
//获取对方法的端口号
System.out.println(packet.getPort());
//获取对方的ip地址
System.out.println(packet.getAddress());
//关闭socket
socket.close();
}
6、UDP传输优化(可发送多条数据)
public static void main(String[] args) throws Exception {
//从键盘录入数据
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//创建发送端Socket 可以ip ,会提供一个随机的
DatagramSocket socket = new DatagramSocket();
//循环接收数据
while(true){
String str = br.readLine();
//创建装载数据的包 要指明IP地址,端口号,
DatagramPacket packet = new DatagramPacket(str.getBytes(), str.getBytes().length,
InetAddress.getByName("127.0.0.1"), 6666);
//发送数据
socket.send(packet);
if("结束".equals(str)){
break;
}
}
//关闭socket
socket.close();
}