UDP

本文深入探讨了UDP(用户数据报协议)的工作原理,包括其无连接特性、速度优势及可能的数据丢失风险,并通过实例代码展示了如何使用Java进行UDP数据发送与接收。适合初学者理解UDP协议并进行实际操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

package datagarm;
import java.io.*;
import java.net.*;
public class DategramSend //UDP发送端
{
//UDP是无连接的传输方式(它不管接收端存不存在,不管接收端有没有收到发送的数据)
//UDP速度快,但容易丢包。
//一般丢失一点东西也不影响使用的情况会用UDP:视频电话,有线电视啥的用UDP
//比较重要的东西,或者下载文件(丢失数据会打不开),用TCP
	
	//数据报套接字相当于家,数据报包相当于快递,在发送快递时,重要的是在快递上(DatagramPacket)写上地址(IP和端口号)
	public static void main(String[] args) throws IOException {
		DatagramSocket ds=new DatagramSocket();//创建数据报套接字对象,默认构造方法会默认给定一个端口号(没啥用)
		
		byte[] b="Hello UDP".getBytes();
		InetAddress ip=InetAddress.getByName("127.0.0.1");//这个IP为本机IP(适用于所有电脑)
		
		//第一个参数为字节数组,第二个参数为字节数组的长度(这里写字符串长度不靠谱,因为一个中文是一个字符但是两个字节)
		//第三个参数是InetAddress对象,它表示你要发送给的那个人的IP,第四个参数为端口号,表示你发送给的那个人的端口号
		DatagramPacket dp=new DatagramPacket(b,b.length,ip,6666);
		ds.send(dp);//将数据报包发送出去
		ds.close();//关闭流
	}

}
package datagarm;
import java.net.*;
import java.io.*;
public class DategramReceive //UDP的接收端
{

	public static void main(String[] args) throws IOException {
		DatagramSocket ds=new DatagramSocket(6666);//指定端口号(告诉快递送到哪里,IP不用指定,因为发送的数据已经达到你的电脑上了)
		byte[] b=new byte[1024*64];//一个字节数为64K的数组,因为不知道传过来的数据有多大所以尽量开大
		
		DatagramPacket dp=new DatagramPacket(b,b.length);//第一个参数是字符数组,第二个参数是存多少个该数组中的元素到数据报包中
		
		ds.receive(dp);//把接收到的数据存到数据报包里,其实是存在数据报包的数组里,receive会永远等待,直到接收到发送过来的数据
		System.out.println(new String(b,0,dp.getLength()));//new一个String对象,把字节数组转化为字符串,第一个参数是字节数组
		//第二个参数是从这个字节数组哪里开始,第三个参数表示取多少个字节。这里dp.getLength()返回的是接收到的数据的真实长度
		System.out.println(dp.getAddress().getHostAddress());//dp.getAddress()返回InetAddress对象,这个对象是发送端IP对应的
		
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值