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对象)
        *          
        * */

4web服务器原理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值