网址![](https://img-blog.csdnimg.cn/direct/14854e1f66634ab68cae02ada82f0621.png)
- 客户端:实际指运行在本电脑的程序(浏览器应用程序)
- 服务端:实际服务器的Web程序
网址的实现(IP)
如何实现客户端和服务端之间的链接?满足request和response要求?实现二者的精确查找?
- 定位机器 --> 凭借网卡区分机器 --> 每个网卡有一个独特编号 --> 类似IP地址
- 定位机器程序 --> 通过端口区分程序 --> 每个程序运行时占用一个端口(端口约6w个,有的程序占用一个固定端口,有的程序无所谓端口号)
- 定位程序资源 --> url(统一资源定位符) --> 字符串网址,类似文本路径。
汇总:
网址 = 协议名称://IP:端口号/uri
例如 百度网址: http://202.108.22.5:80/index.html
域名网址
IP数值记不住,所以实际生活中没人用IP搜索网址,改用域名搜索
即: 网址 = 协议名称://域名:端口号/uri
例如 百度网址: http://baidu.com:80/index.html
域名网址的搜索过程
默认数据
- 默认端口
http:80 ftp:21 https:443
- 默认统一资源定位器url:index.html
模拟服务端接收客户端请求
模拟过程
- 定义一个ServerSocket类变量,准备接收浏览器传来的请求
- 接收请求
- 将接受的请求输出
代码实现
import java.io.*; //流
import java.net.*; //网络
public class HttpServer {
public static void main(String[] args) throws Exception { // 处理ServerSocket定义的异常请求
// ServerSocket在java.net里定义过的,需传参的函数,一个整数,表示你要占用的端口
ServerSocket ss = new ServerSocket(10051); // 10051是瞎蒙的,他也不知道哪个端口被占用
Socket s = ss.accept();
InputStream in = s.getInputStream();
int r;
while ((r = in.read()) != -1) {
System.out.print((char) r);
}
s.close();
}
}
代码运行过程
- 运行代码
- 保持代码运行状态,在浏览器中输入地址,向程序发送请求,例如:http://127.0.0.1:10054/index.html
- 继续运行查看结果,对比http协议请求格式
运行结果截图
请求格式说明
模拟客户端接收服务端响应
模拟过程
- 创建一个客户端(请求访问的地址,地址端口号)
- 传入标准请求协议,等待服务端进行响应
- 接收服务端响应并输出
代码模拟
import java.net.*;
import java.io.*;
public class HttpClient {
public static void main(String[] args)throws Exception{ //异常处理
Socket s = new Socket("www.baidu.com",80); //地址/域名(注意字符),端口
OutputStream out = s.getOutputStream();
Writer writer = new OutputStreamWriter(out); //将字节流转换成字符流
PrintWriter pw = new PrintWriter(writer); //将字符流转换成打印流
//开始一行行打印
pw.println("GET /index.html HTTP/1.1");//协议第一行
pw.println("Host: www.baidu.com");
pw.println(""); //空行不能少
pw.flush(); //不管写了多少,都要将缓冲区释放,不然有可能有部分数据会丢失
//开始接受响应
InputStream in = s.getInputStream(); // 得转为字符流,不然接收汉字会显示?? 因为汉字占两个字节
InputStreamReader reader = new InputStreamReader(in,"UTF-8"); //转utf-8,不然可能会中文乱码
int r;
while ((r = reader.read()) != -1) {
System.out.print((char) r);
}
s.close();
}
}
运行代码截图:
响应格式说明:
今日作业
- 复习http协议
- 学习html语言至表单 https://www.w3school.com.cn/html/index.asp