UDP协议发送和接收消息案例详解

时间:2022-12-15 16:56:33

UDP:User Datapacket Protocol       用户数据报协议 ,非面向连接的,不可靠的[类似于发短信]。

思路:

将UDP工程分两个包: 发送方包(sender)和接收方包(receiver)

发送方包(sender)定义一个发送方类(Sender);接收方包(receiver)定义一个接收方类(Sender);

发送方(sender)类需要定义四个变量:

变量含义

变量类型

传入参数

举例

发送者地址

InetSocketAddress

发送者的ip地址和端口

InetSocketAddress senderAdd=new InetSocketAddress("127.0.0.1",9091);

接收者地址

InetSocketAddres

接收者的ip地址和端口

InetSocketAddress receiverAdd=new InetSocketAddress("127.0.0.1",9092);

UDP套接字[快递员]

DatagramSocket

传入发送者参数创建UDP套接字[快递员]

DatagramSocket socket=new DatagramSocket(senderAdd);

数据[包裹]

DatagramPacket

传入字节数组、数组长度和接收者参数

DatagramPacket packet=new DatagramPacket(buf,buf.length,receiverAdd);

然后执行UDP套接字[快递员]发送(send)的方法:socket.send(packet);

代码如下:

package sender;


import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
/**
* UDP发送方
* @author liubo
*
*/
public class Sender {
public static void main(String[] args) throws Exception {
//发送者
InetSocketAddress senderAdd=new InetSocketAddress("127.0.0.1",9091);
//接收者
InetSocketAddress receiverAdd=new InetSocketAddress("127.0.0.1",9092);
//UDP套接字[快递员]
DatagramSocket socket=new DatagramSocket(senderAdd);

for(int i=0;i<10;i++){
//数据
String msg="湖南长沙牛耳教育龙哥威武+"+i+"!";
byte[] buf=msg.getBytes();
DatagramPacket packet=new DatagramPacket(buf,buf.length,receiverAdd);
//发送
socket.send(packet);
}
}

}


接收方(Sender)类需要定义三个变量

变量含义

变量类型

传入参数

举例

接收者地址

InetSocketAddres

接收者的ip地址和端口

InetSocketAddress receiverAdd=new InetSocketAddress("127.0.0.1",9092);

UDP套接字[快递员]

DatagramSocket

传入接收者变量创建UDP套接字[快递员]

DatagramSocket socket=new DatagramSocket(receiverAdd);

存放数据的包裹

DatagramPacket

传入字节数组、起始位置和数组长度

DatagramPacket packet=new DatagramPacket(buf,0,buf.length);

然后执行UDP套接字[快递员] 接收(receive)的方法:socket.receive(packet);

代码如下:

package receiver;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class Receiver {
public static void main(String[] args) throws Exception {
//接收方地址
InetSocketAddress receiverAdd=new InetSocketAddress("127.0.0.1",9092);
//UDP套接字
DatagramSocket socket=new DatagramSocket(receiverAdd);
for(int i=0;i<10;i++){
//存放数据的包
byte[] buf=new byte[1024];
DatagramPacket packet=new DatagramPacket(buf,0,buf.length);
//接收数据
socket.receive(packet);
//从包中获得数据,会丢掉没有存放数据的位置
byte[] bs=packet.getData();
String s=new String(bs);
System.out.println(s);
}
}

}

运行时,先运行接收类,再运行发送类。

结果如下图。

UDP协议发送和接收消息案例详解