二十五、Java中的网络编程

1.什么是网络?

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

作用:信息传输,资源共享

优点: 资源共享免费

2.OSI七层参考模型和TCP/IP四层参考模型

OSI七层:

应用层:文件传输,常用协议http,snmp,FTP

表示层:数据格式化,代码转换,数据加密

会话层:建立,解除会话。

传输层:提供端对端的接口。Tcp,udp

网络层:为数据包选择路由,ip,icmp

数据链路层:传输有地址的帧。

物理层:二进制的数据形式在物理媒介上传输数据。

TCP/IP四层

应用层、传输层、IP层【网际层】、网路接口层【网络连入层】

3.计算机网络四要素

1)ip地址

  • 处于网络中的通信设备(电脑、手机、电视等),都会分配一个ip地址。
  • 这些设备在通信之前,首先要通过通信设备的网卡接入到网络中.
  • 而这个网卡属于一个硬件,并且所有的网卡在出厂的时候,都有一个固定的网卡地址,并且这个网卡地址(MAC地址)全球唯一.

查看网卡地址(MAC地址)

1.在命令提示行窗口中输入 ipconfig /all 可以查询ip(mac地址)相关的详细信息

2.linux操作系统使用ifconfig可以查询ip(mac地址)相关的详细信息

固定的网卡地址((MAC地址))与IP地址的关系

例如: 固定的网卡地址(MAC地址):[00-0C-29-7A-CA-8E]

  IP地址:[192.168.1.220]

 所有的网卡都有一个唯一的物理地址,但是这个地址非常的不好记,于是给每个网卡又分了一个逻辑(IP)地址。这个逻辑地址就是ip地址。通信的过程中,就可以根据这个逻辑地址找到处于网络中的这台设备。

IP地址也是对处于网络中的某个通信终端的标识。

IP地址与域名的关系

由于IP地址也不容易记忆,,因此又给每个ip绑定了一个名称,这个名称被称为(域名)。

[00-0C-29-7A-CA-8E]----[192.168.1.220]----https://www.baidu.com/[域名]

本机默认的ip地址是127.0.0.1;它有一个对应的默认的域名localhost。

2)DNS服务器【域名解析服务器】

域名解析有2种步

第一步:本地解析:

在我们的操作系统中,有一个hosts文件,当输入域名之后,首先会在hosts文件中找有没有当前的域名对应的IP地址,有就会使用这个IP地址。“C:\Windows\System32\drivers\etc\hosts”

第二步:DNS服务器解析

如果第一步解析失败了,会到网络中的DNS服务器上进行解析。DNS服务器中会将全球所有的域名和IP设置在其中。如果DNS服务器解析失败,说明当前的域名有问题的。

3)协议

协议:通过双方通信的时候需要遵守的通讯规则

高级协议:应用协议:http、ftp、https等

底层协议:UDP、TCP

4)端口

我们可以通过ip找到网络中具体那个通讯终端设备。而具体需要访问这个设备中那个资源(软件)信息,这时由于设备中运行确定资源,这个时候必须有唯一的编号(标识),通过这个标识我们可以准确访问到ip地址具体的资源

端口: 是一台设备(电脑、手机、等)上某个应用程序的唯一标识。设备中运行的任何一个软件,只要启动,就肯定会有一个唯一的编号与整个软件绑定。

端口的范围0~65535之间。0~1024之间的数字已经给操作系统的应用程序所占用,这是后期需要的程序必须大于1024。

4.InetAdress类

Java.net包类InetAddress此类表示换联网协议(IP)地址

public class InetAddress implements java.io.Serializable

InetAddress类的构造方法:

缺省修饰符 InetAdderss(){}

我们在自己的java程序中不能通过new+构造方法创建InetAdreass来创建对象。

我们就需要使用下面两个静态方法得到InetAddress类对象

static InetAdress getLocalHost()返回包含主机IP地址的InetAddress对象。

static InetAdress getByName(String host)根据域名得到包含该域名对应的ip地址的InetAdress对象。

实例方法:

String getHostAddress() 返回 IP 地址字符串(以文本表现形式)。

String getHostName() 获取此 IP 地址的主机名。

例子:

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

public class InetAddressTest {

	public static void main(String[] args) throws UnknownHostException {
		// 获取本地ip
		InetAddress lochost = InetAddress.getLocalHost();
		String ipstr = lochost.getHostAddress();
		String ipname = lochost.getHostName();
		System.out.println("ip地址:" + ipstr);
		System.out.println("ip名字:" + ipname );
		
		//通过域名获取网络ip
		String host = "www.people.com.cn";
	 	InetAddress addobj = InetAddress.getByName(host);
	 	String ip = addobj.getHostAddress();
	 	String hostname = addobj.getHostName();
	 	System.out.println("服务器ip:" + ip);
	 	System.out.println("服务器域名:"+ hostname);
	}
}

5.URL与RUI的区别?

1)URI: 统一资源标识符

 表示的是web上每一种可用的资源。

URI通常有三部分组成:

        (1)资源的命名机制

        (2)存放资源的主机名

        (3)资源自身的名称

2)URL是URI的一个子集。统一资源定位符。

采用URL可以用一种传统的格式来面试各种信息资源,包括文件服务器地址和目录登。

URL是URI概念的一种实现。

URL通常由三部分组成:

  1. 第一部分是协议(服务方式)
  2. 第二部分是村友该资源的主机IP地址(有事包括端口号)
  3. 第三部分是主机资源的具体地址,如目录文件名等等。

每个部分的分割符

第一部分和第二部分用“://”符号隔开,

第二部分和第三部分用“/”符号隔开。

第一部分和第二部分是不可缺少的,第三部分有时可以省略。 

例如:https://www.baidu.com/index.html---资源访问地址

从上面的例子来看,你可能觉得URI和URL可能是相同的概念,其实并不是,URI和URL都定义了资源是什么,但URL还定义了该如何访问资源。URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。

6.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 ,以便从该连接读取。

例子:

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

public class URLTest {

	public static void main(String[] args) throws IOException {
		// 完成网络图片的下载
		//1.创建URL网络地址
		String str = "https://m.360buyimg.com/babel/jfs/t1/202344/11/17211/252669/61a48dbbE5213a48c/b58a51d5874f77cf.jpg.webp";
		URL imgurl  = new URL(str);
		InputStream in =  imgurl.openStream();
		byte readdata[] = new byte [1024];
		int temp = 0;
		//创建内存输出流对象
		ByteArrayOutputStream outnc = new ByteArrayOutputStream();
		
		//读取数据
		while ((temp = in.read(readdata))!=-1) {
			outnc.write(readdata, 0, temp);
		}
		
		//创建本地文件
		File localfile = new File("G:"+File.separator +"lj" + File.separator +"tu1.webp" );
		OutputStream out = new FileOutputStream(localfile);
		out.write(outnc.toByteArray());
		out.close();
		outnc.close();
		in.close();
	}

}

无奈源于不够强大

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值