1.网络访问方式和网络结构介绍
网络访问相关协议
网络结构
2常见网络名词介绍
2.1网络应用结构
b/s 结构 浏览器(通用) 服务器 每次用户都会下载 只需要更新服务器 (加载较慢)
c/s结构 客户端(专用) 服务器 公共部分不需要下载 只加载数据(加载较快) 如果基础公共部分变动 需要更新安装客户端
2.2应用层协议
http应用层协议 规定应用程序使用的数据格式
ftp 文件传输协议
邮件传输协议
厂商自定义协议 数据库驱动 jdbc:mysql//
2.3传输层协议
TCP 保证数据可以完整安全的传给对方
面向连接 传输数据前 必须建立好连接
可靠连接 数据错误 丢包 顺序错乱 都会重发
连接三次握手

与请求方式相关 get 拼在url后边 请求体是空的
post 存入请求体
3.2响应报文格式

application/json json结构字符串
什么叫使用协议:
浏览器 按照http 请求报文格式发送数据
;
//System.out.println(localHost);
//获得全部地址 ipv4 和 ipv6
InetAddress[] allByName = InetAddress.getAllByName(localHost.getHostName());
for (InetAddress iar: allByName){
System.out.println(iar);
}
地址打印结果:
PC-20240723RWZC/192.168.0.42
PC-20240723RWZC/fe80:0:0:0:c208:8998:dee3:ca48%12
4.2URL类
URL表示统一资源定位符
一个可以访问的地址 完整的地址
http:// www.example.com : 1080 /docs/resource1.html ? name=jack
协议 地址/域名 端口 资源地址 请求参数
URI表示统一资源标识符(是地址的部分引用)
/docs/resource1.html ? name=jack
URL类的作用
1.可以按照规则 解析url字符串
2.如果是标准url地址 java发起http请求 访问指定的服务器
package com.javasm.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
/**
* @author gfs
* @version 0.1
* @className URLDemo
* @descriptioin:
* @date 2024/11/18 14:45
* @since jdk11
*/
public class URLDemo {
public static void main(String[] args) {
try {
//1.按标准格式解析url
//url编码 可以在url字串中表示非ASCII字符
URL url = new URL("http://127.0.0.1:8080/mytest?username=jack");
System.out.println(url.getProtocol());//获取协议
System.out.println(url.getPort());//获得端口
System.out.println(url.getHost());//获取主机
System.out.println(url.getPath());//获得资源地址
System.out.println(url.getQuery());//获得查询参数
System.out.println(url.getFile());///mytest?username=jack
//2.通过url做网络请求
URL url1 = new URL("http://t.weather.itboy.net/api/weather/city/101010100");
URLConnection urlConnection = url1.openConnection();
//1.网络相关API会经过高度封装
//2.网络 通过输出/输出流 互相传输数据
//3.java中http相关api做网络数据接口二次封装使用
//通过输入流读返回数据
InputStream inputStream = urlConnection.getInputStream();
//只需要读响应体
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String s = bufferedReader.readLine();
System.out.println(s);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
4.3 TCPUDP 传输层的数据封装类
TCP在java中的封装
Socket 客户端套接字
ServerSocket服务器套接字
示例1:
TCP连接
通过socket 和ServerSocket 两个java进程连接 互相传输数据
clientDemo 客户端
package com.javasm.netTest1;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class ClientDemo {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1",7788);
//用于读取数据
//InputStream inputStream = socket.getInputStream();
//用于写数据
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
dataOutputStream.writeUTF("你好 小黑子");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
ServerDemo 服务端
package com.javasm.netTest1;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(7788);
System.out.println("开始监听7788端口 等待访问........");
Socket accept = serverSocket.accept();
//用于读取数据
InputStream inputStream = accept.getInputStream();
DataInputStream dis = new DataInputStream(inputStream);
String s = dis.readUTF();
System.out.println(s);
//用于写数据
//OutputStream outputStream = accept.getOutputStream();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
示例2:
UDP连接(了解)
发送方
package com.javasm.netTest2;
import java.io.IOException;
import java.net.*;
public class SendDemo {
public static void main(String[] args) {
try {
DatagramSocket datagramSocket = new DatagramSocket();
//数据报包
DatagramPacket dp = new DatagramPacket("hello".getBytes(),"hello".length(), InetAddress.getLocalHost(),8888);
//发送数据报包
datagramSocket.send(dp);
} catch (SocketException e) {
throw new RuntimeException(e);
} catch (UnknownHostException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
接收方
package com.javasm.netTest2;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class ReciveDemo {
public static void main(String[] args) {
try {
DatagramSocket datagramSocket = new DatagramSocket(8888);
//数据报包
byte[] bytes = new byte[5];
DatagramPacket datagramPacket = new DatagramPacket(bytes,5);
System.out.println("等待8888端口传入的数据/.....");
datagramSocket.receive(datagramPacket);
System.out.println("接收到的数据是:"+new String(bytes));
} catch (SocketException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
5.web服务器核心功能分析
![image-20241118162647518](https://www.neet0316.com/wp-content/uploads/2025/12/image-20241118162647518.png
参考day8_webServer代码理解 服务器运行机制