Advertisement

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)

还没有任何评论哟~