Java---网络编程

1.什么是网络?

在计算机领域中网络是信息传输、接受、共享的虚拟平台。通过它吧各个点、面、体联系到一起

从而实现这些资源的共享

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

优点:共享资源免费

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

计算机网络是指由通信线路互相连接的许多自主工作的计算机构成的集合体,各个部件之间以何种规则进行通信,就是网络模型研究的问题

网络模型一般指OSI七层参考模型和TCP/IP四层参考模型。这两个模型在网络中应用最为广泛。

OSI七层参考模型:应用层/表示层/会话层/传输层/网络层/数据链路层/物理层

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地址也不容易记忆,因此又给每个绑定了一个名称,这个名称被称为(域名)。

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

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

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

域名解析有2步:

1.本地解析:

在我们操作系统中,有一个hosts文件,当输入域名之后,首先会自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,端口其实就是进入本台计算时,访问本台计算机所运行程序的入口。

 4.InetAddress类的使用

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 TestMain {

	public static void main(String[] args) throws UnknownHostException {
		//得到本机IP地址和计算机名称
		//得到包含有本机IP地址的InetAddress对象
		//static InetAddress getLocalHost() 返回包含有本机IP地址的InetAddress对象
		InetAddress bjInetAddress=InetAddress.getLocalHost();
		//得到本机IP地址
		String benjiIp=bjInetAddress.getHostAddress();
		System.out.println("本机IP:"+benjiIp);
		//得到本机计算机名
		String benjiname=bjInetAddress.getHostName();
		System.out.println("本机计算机名称:"+benjiname);
		
		//得到百度的IP地址和计算机名
		String host="baidu.com";
		//static InetAddress getByName(String host) 根据域名得到包含有该域名对应ip地址的InetAddress对象。
		InetAddress baiduInetAddress=InetAddress.getByName(host);
		//得到百度的ip地址
		String babiduIP=baiduInetAddress.getHostAddress();
		System.out.println("百度IP:"+benjiIp);
		//得到百度的计算机名
		String baiduname=baiduInetAddress.getHostName();
		System.out.println("百度计算名:"+baiduname);
	}
}

 5.URL与URI的区别?

1.URI---统一资源标识符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源,如HTML文档、图像。视频片段、程序等都由一个URL进行标识的

URL通常由三部分组成:

1.资源的命名机制;
2.存放资源的主机名;
3.资源自身的名称。

2.URL是URI的一个子集。它是Uniform Resource Locator的缩写,译为“统一资源定位符”。

 采用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,String file)--创建URL从指定对象potocol,host,port数,和file 

 实例方法:

URLConnection  openConnection()--返回一个URLConnection实例,表示与URL引用的远程对象的URL(打开一个URL连接)

InputStream    openStream() 打开与此 URL ,并返回一个 InputStream ,以便从该连接读取资源。(打开与此URL关联的InputStream )

例如:

package com.wangxing.test2;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;

public class TestMain {

	public static void main(String[] args) throws IOException{
		String path="https://img14.360buyimg.com/n0/jfs/t1/219743/31/983/108306/616e758aEc8fea4d3/1a18abe36a5d8ce9.jpg";
		//创建URL对象
		URL url=new URL(path);
		//创建输入流
		InputStream in=url.openStream();
		//保存读取来得具体数据的字节数组
		byte data[]=new byte[1024];
		//保存读取来的具体字节数
		int temp=0;
		//创建一个文件
		File file=new File("D:"+File.separator+"test1.jpg");
		//创建输出流 数据输出到文件中
		FileOutputStream fileout=new FileOutputStream(file);
		//读取数据
		while((temp=in.read(data))!=-1){
			fileout.write(data,0,temp);
		}
		fileout.close();
		in.close();
	}
}
package com.wangxing.test2;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;

public class TestMain2 {

	public static void main(String[] args) throws IOException{
		String path="https://img14.360buyimg.com/n0/jfs/t1/219743/31/983/108306/616e758aEc8fea4d3/1a18abe36a5d8ce9.jpg";
		//创建URL对象
		URL url=new URL(path);
		//创建输入流
		InputStream in=url.openStream();
		//保存读取来得具体数据的字节数组
		byte data[]=new byte[1024];
		//保存读取来的具体字节数
		int temp=0;
		//创建内存输出流对象。讲数据输出到内存中
		ByteArrayOutputStream out=new ByteArrayOutputStream();
		//读取数据
		while((temp=in.read(data))!=-1){
			out.write(data,0,temp);
		}
		//创建一个文件
		File file=new File("D:"+File.separator+"test.jpg");
		//创建输出流 数据输出到文件中
		FileOutputStream fileout=new FileOutputStream(file);
		fileout.write(out.toByteArray());
		fileout.close();
		out.close();
		in.close();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值