网络编程之UDP的复习

UDP的实现
  Java中实现UDP协议的两个类,分别是DatagramPacket数据包类以及DatagramSocket套接字类。

其与TCP协议实现不同的是:
  UDP的套接字DatagramSocket相比于Socket、ServerSocket来说,是一个非常简单的概念,没有连接的含义。套接字只需要知道侦听和发送数据包的本地端口即可。

也就是在TCP协议中庸Socket类和ServerSocket类进行功能划分,UDP协议中只用一个数据包套接字DatagramSocket发送和接受数据即可。

发送和接收数据、地址和端口都封装在数据包类DatagramPacket中。

发送端:
创建sockect 对象
准备数据,并将数据打包
发送

把数据转成字节数组
在这里插入图片描述
getByName 的好处是既可以传ip地址 还可以传主机名称
在这里插入图片描述
端口号由发送端决定 端口号由最大值 65536 ,1-1024的端口号不要用,是给系统准备的
数据打包
在这里插入图片描述
发送
在这里插入图片描述
接收端
创建接收端 socket 对象
在这里插入图片描述
接收数据
在这里插入图片描述
解析数据
打印数据
释放资源
线程阻塞 线程停留在这,不会继续向下运行
字节数组变字符串
在这里插入图片描述
下面是实现传输文件内容的UDP写法
传输端:
public void test() throws Exception {
DatagramSocket ds = new DatagramSocket();
//获取文件夹位置内容
File f = new File(“C:\360Downloads\Software\3.txt”);
//创建输入流
InputStream is = new FileInputStream(f);
String src="";
byte[] b = new byte[1024];
int len = 0;
//读书文件夹内容
while ((len = is.read(b)) != -1) {
src+=new String(b,0,len);

	}
	is.close();
	//System.out.println(src);
	
	byte[] bys = src.getBytes();
	
	int length = bys.length;
	InetAddress byName = InetAddress.getByName("192.168.0.128");
	int port = 20086;
	//创建传输对象
	DatagramPacket dp = new DatagramPacket(bys, length, byName, port);
	//传送
	ds.send(dp);
	ds.close();
}
接受端:
public void test() throws Exception {
	//接受对象
	DatagramSocket ds = new DatagramSocket(20086);
	
	byte[] bys = new byte[1024];
	int length = bys.length;
	//获取对象内容
	DatagramPacket dp = new DatagramPacket(bys, length);
	//接受
	ds.receive(dp);//线程阻塞
	//转换内容
	byte[] data = dp.getData();
	String str = new String(data, 0, length);
	//System.out.println(str);
	//创建输出流并写入新创建文件夹
	Writer w=new FileWriter("C:\\360Downloads\\Software\\6.txt");
	w.write(str);
	w.close();
	
}
复习到此为止。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值