java中的网络编程

一、什么是网络?

在计算机领域中网络是信息传输、接受、共享的虚拟平台,通过它把各个点、面、体的联系到一起,从而实现这些资源的共享。
作用:信息传输,资源共享
有点:资源共享免费

二、OSI七层参考模型和TCP/IP四层参考模型 

  计算机网络是指由通信线路连接的许多自主工作的计算机构成的集合体,各个部件之间以何种规则进行通信,就是网络模型研究的问题。
   网络模型一般是指OSI七层参考模型和TCP/IP四层参考模型。这两个模型在网络中应用最为广泛。
   OIS七层参考模型:应用层/表示层/会话层/传输层/网络层/数据链接层/物理层

   TCP/IP四层参考模型:应用层、传输层、IP层【网际层】、网络接口层【网络连入层】

三、计算机网络四要素

1.IP地址
        处于网络中的通信设备(电脑、手机、电视等),都会分配一个IP地址。
        这些设备在通信之前,首先要通过通信设备的网卡接入到网络中。
        而这个网卡属于一个硬件,并且所有的网卡在出厂的时候,都有一个固定的网卡地址,并且这个网卡地址(MAC地址)全球唯一。
        查看网卡地址(MAC地址)
        1.在命令提示行窗口中输入ipconfig/all可以查询IP(mac地址)相关的详细信息
        2.Linux操作系统使用ifconfig可以查询IP(Mac地址)相关的详细信息
固定的网卡地址(Mac地址)与IP地址的关系?
   例如:固定的网卡地址(Mac地址)---- FA-A2-D6-BF-A4-A1
        IP地址------------------------------------[192.168.1.255]
   所有网卡都有一个唯一的物理地址,但是这个地址非常的不好记。于是给每个网卡又分了一个逻辑地址就是IP地址。通信的过程中,就可以根据这个逻辑地址找到处于网络中的这台设备。
   IP地址也是对处于网络中的某个通信终端的标识
IP地址与域名的关系?
    由于IP地址也不容易记忆,因袭又给每个IP绑定了一个名称,这个名称 就是域名。
    [FA-A2-D6-BF-A4-A1]---[192.168.1.255]----https://www.baidu.com/域名
    本机默认的IP地址是127.0.0.1;它有一个对应的默认的域名localhost
2.DNS服务器【域名解析服务器】
    域名解析:
    1.本地解析:
        在我们的操作系统,有一个hosts文件中找有没有当前域名对应的IP地址,有就会使用这个IP地址。“C:\Windows\System32\drivers\etc\hosts”
     2.DNS服务器解析
        如果第一步解析失败了,会到网络中的DNS服务器上进行解析。DNS服务器中会将全球的域名和IP设置在其中。如果DNS服务器解析失败,说明当前的域名有问题的。
3.协议
    协议:通信双方通信的时候需要遵守的通信规则。
    后期我们会遇到很多协议(高级协议、应用协议:http、ftp/https)。
    我们在java中网络编程介绍的协议属于底层协议[TCP/UDP],所有的高级协议都是属于底层协议
4.端口
    我们通过ip可以找到网络中具体那个通信终端的设备。而具体需要访问这个设备中的哪个资源(软件)信息,这时由于设备中运行的资源(软件)肯定很多,这时每个资源(软件)必须再给一个唯一的编号(标识)。通过这个标识才能保证我们可以没有错误的访问到指定ip地址的具体那个资源(软件)上。
     端口:是一台设备(电脑、手机登)上某个应用程序的唯一标识。设备中运行的任何一个软件,只要启动,就肯定会有一个唯一的编号与其整个软件绑定。
     端口从0开始到65535之间。0到1024之间的端口数字已经分配给本机的操作系统的应用程序占用,因此后期我们书写程序如果需要绑定端口,这时必须大于1024.
     端口其实就是进入本台计算时,访问本台计算机所运行程序的入口。

四、netAddress类的使用? 

java.net 包类 InetAddress  此类表示互联网协议 (IP) 地址。
public class InetAddress implements java.io.Serializable 
InetAddress类的构方法
缺省修饰符 InetAddress() {}
我们在自己的Java程序中是不能通过new+构造方法的方式创建出InetAddress类对象。
我们就需要使用下面这两个静态方法来得到InetAddress类对象。
    static InetAddress getLocalHost() 返回包含有本机IP地址的InetAddress对象。
    static InetAddress getByName(String host) 根据域名得到包含有该域名对应ip地址的InetAddress对象。
实例方法:
     String getHostAddress() 返回 IP 地址字符串(以文本表现形式)。
     String getHostName() 获取此 IP 地址的主机名。
例如:

package com.wangxing.test1;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetAddressTest {
	public static void main(String[] args) throws Exception {
		//1.得到本机的ip地址和计算机名
		//得到包含有本机ip地址的InetAddress对象
		InetAddress benji=InetAddress.getLocalHost();
		//得到本机IP
		String benjiIP=benji.getHostAddress();
		//获取此 IP 地址的主机名。
		String benjiName=benji.getHostName();
		System.out.println(benjiIP);
		System.out.println(benjiName);
		//2.根据域名得到包含有该域名对应ip地址的InetAddress对象。
		//String host="https://www.baidu.com";错误
		String host="baidu.com";
		//创建根据域名得到此域名的IP地址
		InetAddress baiduInetAddress=InetAddress.getByName(host);
		String baiduip=baiduInetAddress.getHostAddress();
		String baidu=baiduInetAddress.getHostName();
		System.out.println("百度的IP地址:"+baiduip+",名称:"+baidu);
	}
}

 

五、URL与URI的区别? 

URI,统一资源标识符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个URI进行标识的。
URI通常由三部分组成:
    ①资源的命名机制;
    ②存放资源的主机名;
    ③资源自身的名称。
URL是URI的一个子集。它是Uniform Resource Locator的缩写,译为“统一资源定位符”。
采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
    URL是URI概念的一种实现方式。
    URL的格式由三部分组成: 
    ①第一部分是协议(或称为服务方式)。
    ②第二部分是存有该资源的主机IP地址(有时也包括端口号)。
    ③第三部分是主机资源的具体地址,如目录和文件名等。
第一部分和第二部分用“://”符号隔开,
    第二部分和第三部分用“/”符号隔开。
    第一部分和第二部分是不可缺少的,第三部分有时可以省略。 
例如:https://www.baidu.com/index.html---资源访问地址
从上面的例子来看,你可能觉得URI和URL可能是相同的概念,其实并不是,URI和URL都定义了资源是什么,但URL还定义了该如何访问资源。URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。

六、java中的URL类

 URL类的构造方法
    URL(String spec) 从 String表示形成一个 URL对象。 
    URL(String protocol, String host, int port, String file)创建 URL从指定对象 protocol,host,port数,和file 。 
    实例方法
    URLConnection    openConnection() 返回一个URLConnection实例,表示与URL引用的远程对象的URL 。 
    InputStream    openStream() 打开与此 URL ,并返回一个 InputStream ,以便从该连接读取。 
例如:从网络中的获取一张图
1.将读取的网络资源保存在内存输出流中(前提数据量小)

package com.wangxing.test2;


import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;

public class UrlTest {

	public static void main(String[] args) throws Exception {
//		URL类的构造方法
//		URL(String spec) 从 String表示形成一个 URL对象。 
//		URL(String protocol, String host, int port, String file)创建 URL从指定对象 protocol,host,port数,和file 。 
		//创建URL对象
		String path="https://img14.360buyimg.com/n0/jfs/t1/161275/13/9843/137365/60b59f8eEbade8c1d/3c778f0a77663104.jpg";
		URL url=new URL(path);
		/*实例方法
		URLConnection	openConnection() 返回一个URLConnection实例,表示与URL引用的远程对象的URL 。 
		InputStream	openStream() 打开与此 URL ,并返回一个 InputStream ,以便从该连接读取。 */
		//创建内存输出流对象
		ByteArrayOutputStream  out=new ByteArrayOutputStream();
		//创建一个接受数据的字节数组
		byte[] data=new byte[1024];
		//创建每次读入保存数据大小的变量
		int temp=0;
		//创建打开连接资源的输入流
		InputStream in=url.openStream();
		while((temp=in.read(data))!=-1){
			out.write(data, 0, temp);
		}
		//创建文本对象和目标地址
		String pathname="E:"+File.separator+"wangxingPeiXun"+File.separator+"java后端"+File.separator+"java基础"+File.separator+"20211201_22"+File.separator+"网络图片.jpg";
		File file=new File(pathname);
		//创建写出文件的输出流对象
		FileOutputStream fileout=new FileOutputStream(file);
		//将内存输出流读到的转换成字节数组让输出流读取
		fileout.write(out.toByteArray());
		fileout.close();
		out.close();
		in.close();
		
	}
}

 2.从网络资源中读取后直接输出到目标文件中

package com.wangxing.test2;


import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;

public class UrlTest2 {

	public static void main(String[] args) throws Exception {
//		URL类的构造方法
//		URL(String spec) 从 String表示形成一个 URL对象。 
//		URL(String protocol, String host, int port, String file)创建 URL从指定对象 protocol,host,port数,和file 。 
		//创建URL对象
		String path="https://img14.360buyimg.com/n0/jfs/t1/161275/13/9843/137365/60b59f8eEbade8c1d/3c778f0a77663104.jpg";
		URL url=new URL(path);
		/*实例方法
		URLConnection	openConnection() 返回一个URLConnection实例,表示与URL引用的远程对象的URL 。 
		InputStream	openStream() 打开与此 URL ,并返回一个 InputStream ,以便从该连接读取。 */
		//创建文本对象和目标地址
		String pathname="E:"+File.separator+"wangxingPeiXun"+File.separator+"java后端"+File.separator+"java基础"+File.separator+"20211201_22"+File.separator+"网络图片2.jpg";
		File file=new File(pathname);
		//创建写出文件的输出流对象
		FileOutputStream fileout=new FileOutputStream(file);
		//创建一个接受数据的字节数组
		byte[] data=new byte[1024];
		//创建每次读入保存数据大小的变量
		int temp=0;
		//创建打开连接资源的输入流
		InputStream in=url.openStream();
		while((temp=in.read(data))!=-1){
			fileout.write(data, 0, temp);
		}
		fileout.close();
		in.close();
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值