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);
}
}
}
运行时,先运行接收类,再运行发送类。
结果如下图。