UDP协议发送和接收消息案例详解
发布时间
阅读量:
阅读量
UDP:全称为User Datagram Protocol(UDP),是一种无连接状态下的数据传输机制,在网络通信中被广泛采用;其特点包括无需建立连接且不具备可靠性保障(类似于发送简讯)。
思路:
将UDP工程分两个包: 发送方包(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);
}
}
}
运行时,先运行接收类,再运行发送类。
结果如下图。
全部评论 (0)
还没有任何评论哟~
