26-网络编程-08-网络编程(UDP协议-接收端)

/*
 * 建立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传输演示
 * 
 * (二)先运行发送端再运行接收端
 * 丢包,数据发出去没收到
 */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值