一、网络基础
1.1、计算机网络
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
目的
数据交换、资源共享、信息传递
1.2、网络通信的要素
如何实现网络上的通信?
(1)通信双方地址:
- ip
- 端口号
(2)规则:网络通信的协议:
-
TCP/IP参考模型:
-
HTTP:超文本传输协议
-
FTP:文件上传协议
1.3 、IP
ip地址:inetAddress,为实现网络中不同计算机之间的通信,每台机器都必须有一个唯一的标识。
- 唯一定位一台网络上计算机
- 127.0.0.1:本机loaclhost
1.4、端口
端口表示计算机上的一个程序的进程
- 不同的进程有不同的端口号!用来区分软件!
- 被规定0-65535
1.5、通信协议
通信协议是指双方实体完成通信或服务所必须遵循的规则和约定
(1)TCP协议
- TCP:用户传输协议
- 建立连接(打电话)
- TCP是面向连接的协议,因此每个TCP连接都有3个阶段:连接建立、数据传送和连接释放
- 三次握手与四次挥手
(2)UDP协议
- UDP:用户数据报协议,它是TCP/IP协议簇中无连接的运输层协议。
- 不连接(发短信)
(3)TCP与UDP的区别
- TCP基于连接,UDP是无连接的;
- 对系统资源的要求,TCP较多,UDP较少;
- UDP程序结构较简单;
- TCP是流模式,而UDP是数据报模式;
- TCP保证数据正确性,而UDP可能丢包;TCP保证数据顺序,而UDP不保证;
(4)HTTP协议
HTTP协议是基于TCP协议之上的请求/响应式协议,HTTP请求报文由请求行、首部行和实体主体组成,由浏览器发送给服务器。
Http协议定义了很多与服务器交互的方法,最基本的4种,分别是get,post,put,delete,
Get和Post请求模式的区别
- get一般用于获取/查询资源信息,而post一般用于更新资源信息。
- get提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&连接,如:https://www.baidu.com?nameasdjhasj&pswword=sjdsdsad,post方法是把数据放在HTTP包的body中
- get提交的数据大小有限制(URL的最大长度是2048个字符),(浏览器对URL的长度有限制),而post方式提交的数据没有限制
- get方式需要使用Request.QueryString来获取变量的值,而post方式通过Request.From;来获取变量的值
- get方式提交数据,会带来安全问题,比如一个登陆页面,通过get方式提交数据,用户名和密码会出现在URL中,如果页面可以缓存或者其他人可以访问这台机器,就可以从历史记录中获取该用户的用户名和密码了
HTTP和HTTPS的区别
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单来说就是HTTP的安全版
- https协议需要到ca申请证书,一般免费证书很少,需要缴费。
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;https协议是有ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
二、Java中网络相关API的应用
2.1、InetAddress类
InetAddress类的对象用于IP地址和域名,该类提供以下方法:
-
getByName(String s):获得一个InetAddress 类的对象,该对象中含有主机的IP地址和域名;
-
String getHostName():获取InetAddress对象的域名;
-
String getHostAddress():获取InetAddress对象的IP地址;
-
getLocalHost():获得一个InetAddress对象,该对象含有本地机的域名和IP地址。
代码体现
public class Test01 {
/**
* InetAddress类的练习
* @param args
*/
public static void main(String[] args) throws UnknownHostException {
//获取本机的InetAddress实例
InetAddress inetaddress = InetAddress.getLocalHost();
System.out.println("计算机名:"+inetaddress.getHostName());
System.out.println("IP地址:"+inetaddress.getHostAddress());
System.out.println(inetaddress);
System.out.println("--------------------------------------------");
//根据计算机名获取InetAddress实例
InetAddress address = InetAddress.getByName("XXX");
System.out.println("计算机名:"+address.getHostName());
System.out.println("IP地址:"+address.getHostAddress());
}
}
2.2、URL类
统一资源标识符(Uniform Resource Identifier ,URL)是采用一种特定语法标识一个资源的字符串。所标识的资源可能是服务器上的一个文件。Java的URL网络类可以让你通过URL去练级网络服务器并获取资源。
URL的格式如下:
protocol://host:port/path?query#fragment
例如:https://www.baidu.com/
protocol(协议)可以是HTTP,HTTPS,FTP和File,port为端口号,path为文件路径及文件名。
代码体现
public class Test02 {
/*
* URL类的联系
*/
public static void main(String[] args) {
try {
//创建一个URL实例
URL url1 = new URL("http://www.baidu.com");
//?后面表示参数,#后面表示锚点
URL url2 = new URL(url1,"/index.html?username=tom#test");
System.out.println("协议:"+url2.getProtocol());
System.out.println("主机:"+url2.getHost());
//如果未指定端口号,则使用默认的端口号,此时getPort()方法返回值为-1
System.out.println("端口"+url2.getPort());
System.out.println("文件路径:"+url2.getPath());
System.out.println("文件名:"+url2.getFile(</