/*
* 建立UDP接收端的思路:
*
* 1. 建立udp socket服务,因为是要接收数据,所以必须明确一个端口号
* (详见API,DatagramSocket类的空参构造函数说明:任意可用端口,而构造函数DatagramSocket(int port)是指定端口接收)
* (如果发送端和接收端都是任意端口,那么发送端和接收端基本不会是同一个端口,从而造成丢包,数据发出去,那边没接到)
*
* 2. 创建数据包,用于存储收到的数据,方便用数据包对象的方法解析这些数据
*
* 3. 使用socket服务的receive方法将接收的数据存储到数据包中
*
* 4. 通过数据包的方法解析数据包中的数据
*
* 5. 关闭资源
*/
package demo;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPDemo {
public static void main(String[] args) throws IOException {
System.out.println("接收端启动......");
//1.建立udp socket服务
DatagramSocket ds = new DatagramSocket(10000);//发送端指定发到10000端口,接收端这里也指定10000端口接收
//2.创建数据包(利用DatagramPacket类内的第一个构造函数)
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//3.使用接收方法将数据存储到数据包中
ds.receive(dp);
/**
* 如果先运行发送端,再运行接收端,发现接收端程序一直不停止,因为receive()方法是临时阻塞的,即收不到数据就卡那不动。
*/
//4.通过数据包对象的方法,解析其中的数据,比如ip地址、端口、数据内容等
String ip = dp.getAddress().getHostAddress();
//这里调用DatagramPacket类中的getAddress()方法获取到ip地址对象(即InetAddress类),然后用InetAddress类中getHostAddress()
//方法获取到ip地址字符串
int port = dp.getPort();//用DatagramPacket类的getPort()方法获取端口号
String text = new String(dp.getData(),0,dp.getLength());
//DatagramPacket类特有方法getData()是获取当前数据包中的数据,getLength()是获取数据长度,所以上一行代码是将数据包dp
//中的数据转换为字符串形式。
System.out.println(ip+":"+port+":"+text);
//5.关闭资源
ds.close();
}
}
/**
* 【注意】上一视频是UDP发送端例子,本视频是UDP接收端例子,随便先运行哪个程序都可以。
* 因为UDP是不需要建立连接,所以不用管对方“在不在线”,直接发或者打开接收即可。
* (这里为了演示方便,先运行接收端程序)
*/
/*
* 程序运行结果:
* (一)先运行接收端再运行发送端
* 在发送端Console窗口显示:
* 发送端启动......
* 在接收端Console窗口显示:
* 10.196.19.56:58547:udp传输演示
*
* (二)先运行发送端再运行接收端
* 丢包,数据发出去没收到
*/
26-网络编程-08-网络编程(UDP协议-接收端)
最新推荐文章于 2022-12-11 19:20:08 发布