Java网络编程(二)(URL与UDP)

1、Java URL处理

URL(Uniform Resource Locator)中文名为统一资源定位符,有时也被俗称为网页地址。表示为互联网上的资源,如网页或者FTP地址。

HTTP 协议的 URL 实例如下:

URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。
https://www.jianshu.com/u/ddd4e8122669(简书个人主页)

2、URL 类

2.1、URL类概述及常用方法

在java.net包中定义了URL类,该类用来处理有关URL的内容。对于URL类的创建和使用,下面分别进行介绍。
java.net.URL提供了丰富的URL构建方式,并可以通过java.net.URL来获取资源。


方法作用
public URL(String url) throws MalformedURLException通过给定的URL字符串创建URL
public String getPath()返回URL路径部分。
public URLConnection openConnection() throws IOException打开一个URL连接,并运行客户端访问资源。
2.2、URL类方法使用

***示例:***通过URL地址获取网页资源(通过网页图片资源进行展示);


源代码如下:

/*
 * URL
 * 网页图片下载
 */
public class Demo_12 {
	public static void main(String[] args) {
		BufferedInputStream bin = null;
		BufferedOutputStream bos = null;
		try {
			//创建URL对象
			URL imgUrl = new URL("https://upload.jianshu.io/users/upload_avatars/24120701/4f8929c0-7429-412d-b482-5a705d86eb35.jpg");
			
			//创建访问连接
			HttpURLConnection connection = (HttpURLConnection)imgUrl.openConnection();
			System.out.println("图片下载中········");
			//通过访问连接读取图片
			bin = new BufferedInputStream(connection.getInputStream());
			
			//	向本地文件写入
			
			bos = new BufferedOutputStream(new FileOutputStream(new File("D:\\c\\图片.jpg")));
			
			//进行边读边写操作
			byte data[] = new byte[1024];
			int length = -1;
			while((length = bin.read(data)) != -1) {
				bos.write(data,0,length);
			}
			System.out.println("图片下载完成!");
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			//关闭流
			try {
				bos.close();
			} catch (IOException e) {
				bos = null;
				e.printStackTrace();
			}
			try {
				bin.close();
			} catch (IOException e) {
				bin = null;
				e.printStackTrace();
			}
		}
	}
}

运行后效果如下:



可以看到我们通过URL成功的完成了图片的获取。

3、UDP

3.1、UDP概述

UDP 是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。

UDP相关类用途
InetAddress用于描述和包装一个Internet IP地址
DatagramSocket用于接收和发送UDP的Socket实例。
DatagramPacket用于处理报文,它将Byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成Byte数组。

相关类的用法以及常用方法通过以下实例展示解释:

/*
 * UDP协议
 * DatagramPacket类:封装数据
 * DatagramSocket类: 数据的收发
 */
public class Demo06 {
	public static void main(String[] args) {
		/*
		 * 数据的收取
		 */
		//	DatagramSocket建立基于UDP协议的连接
		try (DatagramSocket socket = new DatagramSocket(8889)){
			//1.创建空的DatagramPacket数据包
			byte[] data = new byte[1024];
			DatagramPacket packet = new DatagramPacket(data, data.length);
			//2.接收信息
			//DatagramSocket将接收到的信息,存入DatagramPacket数据
			socket.receive(packet);	
			//3.获取数据包中的数据
			//3.1获取数据包中的数据部分
			data = packet.getData();
			//3.2获取数据包中的数据字节长度
			int length = packet.getLength();
			String result = new String(data,0,length);
			//3.3获取发送端的信息
			InetAddress address = packet.getAddress();
			System.out.println("发送端:" + address.getHostAddress());
			System.out.println("发送信息:" + result);
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

客户端:

public class UdpDemo {
	public static void main(String[] args) {
		/*
		 * UPD协议下的数据发送
		 */
		try (DatagramSocket socket = new DatagramSocket();){
			//1.创建DatagramPacket数据包
			byte[] data = "你好".getBytes();
			//发送的目标地址
			InetAddress targetHost = InetAddress.getByName("localhost");
			//DatagramPacket对象中包含:发送的数据字节数组、目标地址、目标端口
			DatagramPacket packet = new DatagramPacket(data, data.length, targetHost, 8889);
			//2.使用Socket发送DatagramPacket数据包
			socket.send(packet);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

测试结果:

3.2、UDP协议
  • UDP,用户数据报协议,它是TCP/IP协议簇中无连接的运输层协议。
  • UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。
  • 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务器可同时向多个客户端传输相同的消息。
    UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
  • 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
  • UDP使用尽量最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表。
  • UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部受就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小

4、TCP与UDP的区别

  • TCP基于连接,UDP是无连接的;
  • 对系统资源的要求,TCP较多,UDP较少;
  • UDP程序结构较简单;
  • TCP是流模式,而UDP是数据报模式;
  • TCP保证数据正确性,而UDP可能丢包;TCP保证数据顺序,而UDP不保证;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值