day10_网络
day10_网络
1网络访问模式介绍
2网络常见名词解释
1IP协议
标记计算机地址
IPV4 32位标记计算机地址
255.255.255.255 - 0.0.0.0
127.0.0.1 回送地址 表示本机 localhost 本机域名
192.168.xxx.xxx 局域网专用地址
192.168.1.xxx 192.168.0.xxx
子网掩码
255.255.255.0 255.255.0.0
IPV6 128位标记计算机地址
运行商会做IP共享 隐藏
域名 为了好记
DNS解析
2传输协议
TCP 面相连接 可靠连接 (数据完整性 效率偏低)
面相连接 传输数据前 必须保证双方建立好连接
可靠连接 如果丢包 数据出错 会重发
TCP的连接三次握手
TCP的断开四次挥手
UDP 面相无连接 不可靠连接(效率较高)
面相无连接 直接传数据
不可靠连接 数据出错 丢失 不会重发
端口号
在操作系统中 通过端口号绑定应用程序
操作系统可以识别出 数据时发给哪个应用程序的
同一个端口号 同一时间 只能被一个应用程序占用
2000以下端口号 系统级别的服务
http 80
https 443
2000-5000 知名的应用程序
mysql 3306
5000以上 自定义应用程序
liveServer 5500
vite 5173
tomcat 8080
3应用层协议
应用程序之间发送数据的格式
报文数据(字符 规定字符的格式)
请求报文
响应报文
http协议 浏览器 与 浏览器交互的服务器的数据格式
应用层协议可以自定义
3网络常见API
1InetAddress
获取IP协议相关参数 地址 主机名
package com.javasm; import java.net.InetAddress; import java.net.UnknownHostException; /*** @className: InetAddressDemo* @author: gfs* @date: 2025/10/14 11:32* @version: 0.1* @since: jdk17* @description:*/ public class InetAddressDemo { public static void main(String[] args) { try {InetAddress localHost = InetAddress.getLocalHost(); System.out.println(localHost); InetAddress[] allByName = InetAddress.getAllByName(localHost.getHostName()); for(InetAddress iar :allByName){System.out.println(iar);} } catch (UnknownHostException e) {throw new RuntimeException(e);} } }
2.URL
统一资源定位符 可以访问的URL标准格式地址
协议 地址 端口 资源地址 参数 http:// 127.0.0.1 : 8080 /search ? name=jack
1可以解析URL地址 把每段抽出来
2可以做http请求 访问
package com.javasm; import java.io.*; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; /*** @className: URLDemo* @author: gfs* @date: 2025/10/14 11:37* @version: 0.1* @since: jdk17* @description:*/ public class URLDemo {public static void main(String[] args) { try {URL url = new URL("http://127.0.0.1:8080/search?name=jack&pwd=abc123");System.out.println(url.getProtocol());//协议System.out.println(url.getHost()); //地址System.out.println(url.getPort()); //端口System.out.println(url.getPath()); //访问路径(资源路径)System.out.println(url.getQuery()); //查询参数 URL url2 = new URL("http://t.weather.itboy.net/api/weather/city/101020100"); URLConnection urlConnection = url2.openConnection(); InputStream inputStream = urlConnection.getInputStream();//out 写//in 读BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));String string = br.readLine();System.out.println(string); //根据应用需求 可以对相应体数据做二次封装 } catch (MalformedURLException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);} } }
3Socket
网络套接字 用于客户端与服务端的连接
Socket 用于构建客户端
ServerSocket 用于构建服务端
客户端:
package com.javasm2; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; /*** @className: ClientDemo* @author: gfs* @date: 2025/10/14 14:34* @version: 0.1* @since: jdk17* @description:*/ public class ClientDemo { public static void main(String[] args) { /*socket 基本作用* 1 通过socket 让不同的进程 通过网络连接起来 互传数据* 2 socket 基于tcp协议 不涉及应用层协议(没有规定应用程序之间传什么)可以自定义应用层协议** */ try {Socket socket = new Socket("192.168.0.151",7788);//*// 输出流 给别人(另外的进程)写// 输入流 读别人(另外的进程)发来的数据// *///向连接的服务程序 发送数据OutputStream outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);//name=jack;age=15;address=凤阳街18号dataOutputStream.writeUTF("name=jack;age=15;address=凤阳街18号"); } catch (IOException e) {throw new RuntimeException(e);} } }
服务端:
package com.javasm2; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; /*** @className: ServerDemo* @author: gfs* @date: 2025/10/14 14:37* @version: 0.1* @since: jdk17* @description:*/ public class ServerDemo { public static void main(String[] args) { try {ServerSocket serverSocket = new ServerSocket(7788);System.out.println("开始监听7788端口 等待数据..........");Socket socket = serverSocket.accept();//*// 输出流 给别人(另外的进程)写// 输入流 读别人(另外的进程)发来的数据// */InputStream inputStream = socket.getInputStream();DataInputStream dis = new DataInputStream(inputStream);String stuStr = dis.readUTF();System.out.println("客户端发来的数据:"+stuStr);//解析数据//name=jack;age=15;address=凤阳街18号Student student = new Student();student.setName(stuStr.split(";")[0].split("=")[1]);student.setAge(Integer.valueOf(stuStr.split(";")[1].split("=")[1]) );student.setAddress(stuStr.split(";")[2].split("=")[1]); System.out.println(student);} catch (IOException e) {throw new RuntimeException(e);} } }
注意:
/*socket 基本作用* 1 通过socket 让不同的进程 通过网络连接起来 互传数据* 2 socket 基于tcp协议 不涉及应用层协议(没有规定应用程序之间传什么)可以自定义应用层协议(约定好传输的字符格式 通过网络传student对象)* * */