网络初始b

Posted 鸟随二月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络初始b相关的知识,希望对你有一定的参考价值。

osi七层模型

从上往下:
应用层:针对特定应用的协议。(我们的程序就在这一层,著名的HTTP,SSH)。
表示层:将网络信息包转换成程序需要的数据结构。
会话层:通信管理。负责建立和断开通信连接。
传输层:管理两个节点’之间的数据传输。负责可靠传输)相当于通信中填写收件人信息和发件人信息。其中:网络交互必各的5个部分:1.目标地址IP 2.目标地址的端口 3.源地址IP 4.源端口号 5.协议)。
网络层:地址管理与路由选择(相当于通信方式(飞机或火车))。
数据链路层:互连设备之间传送和识别数据帧(相当于具体路线)。
物理层
:以“o”,“1”代表电压的高低、灯光的闪灭。界定连接器和网线的规格。(光电信号)。

应用层知名协议:HTTP、SSH、FTP
传输层知名协议:TCP/UDP
网络知名协议:IP

TCP/IP 4层协议:

应用层:程序层。
传输层:确认源地址和目标地址的。
网络层:用确定传输方式的。
数据链路层:确定相邻节点直接的数据传输。
也可加上物理层

封装和分用

在这里插入图片描述

UDP和TCP

UDP:无连接、不稳定、面向数据报。
TCP:有连接、稳定、面向数据流。

利用UDP发送数据包Java编程

server

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * UDP 服务器
 */
public class UDPServer {
    // 端口号
    private static final int port = 9001;
    // 接收数据容器的大小
    private static final int bleng = 1024;

    public static void main(String[] args) throws IOException {
        // 1.创建一个 UDP 服务器
        DatagramSocket socket = new DatagramSocket(port);
        while (true) {
            DatagramPacket clientPacket = new DatagramPacket(
                    new byte[bleng], bleng);
            // 2.等待客户端连接
            socket.receive(clientPacket);
            // 执行此代码表示已经有客户端连接
            // 3.拿到客户端的请求信息
            String msg = new String(clientPacket.getData());
            System.out.println("接收到客户端的消息:" + msg);
            // 给客户端反馈一个消息
            String serMsg = msg.replace("吗?", ".").
                    replace("你", "我");
            // 构建客户端发送数据包
            DatagramPacket serPacket = new DatagramPacket(
                    serMsg.getBytes(),
                    serMsg.getBytes().length, // 注意是字节数组的长度
                    clientPacket.getAddress(),
                    clientPacket.getPort()
            );
            // 给客户端发送消息
            socket.send(serPacket);
        }
    }
}

PC

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/**
 * UDP 客户端
 */
public class UDPClient {
    // 服务器端 IP
    private static final String ip = "127.0.0.1";
    // 服务器端端口号
    private static final int port = 9001;
    // 数据包大小
    private static final int bleng = 1024;

    public static void main(String[] args) throws IOException {
        // 1.创建客户端
        DatagramSocket socket = new DatagramSocket();
        // 让用户来输入发送的消息
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.print("->");
            // 接收到用户输入的信息
            String msg = scanner.nextLine();
            // 2.构建发送数据包
            DatagramPacket datagramPacket = new DatagramPacket(
                    msg.getBytes(),
                    msg.getBytes().length,
                    InetAddress.getByName(ip),
                    port
            );
            // 3.发送消息
            socket.send(datagramPacket);
            // 接收服务器端的消息
            DatagramPacket serPacket = new DatagramPacket(
                    new byte[bleng], bleng
            );
            socket.receive(serPacket);
            System.out.println(new String(serPacket.getData()));
        }
    }
}

在ideal中打包发布
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
java -jar jar’s name

利用Tcp发送数据流Java编程

server

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * TCP
 */
public class TCPServer {
    // 端口号
    private static final int port = 9002;

    public static void main(String[] args) throws IOException {
        // 1.创建 TCP 服务器端
        ServerSocket serverSocket = new ServerSocket(port);
        System.out.println("服务器启动成功!");

        // 2.登录客户端的连接
        Socket client = serverSocket.accept();

        System.out.println(String.format("有客户端连接了,客户端IP:%s,端口:%d",
                client.getInetAddress().getHostAddress(), client.getPort()));
        // try-resouce
        try (BufferedWriter bufferedWriter = new BufferedWriter(
                new OutputStreamWriter(client.getOutputStream()));
             BufferedReader bufferedReader = new BufferedReader(
                     new InputStreamReader(client.getInputStream()))
        ) {
            while (true) {
                // 3.接收客户端的消息
                String msg = bufferedReader.readLine();
                if (msg != null && !msg.equals("")) {
                    System.out.println("收到客户端信息:" + msg);
                    // 4.返回给客户端响应信息
                    String serMsg = "我收到了";
                    bufferedWriter.write(serMsg + "\\n");
                    // 刷新缓冲区
                    bufferedWriter.flush();
                }
            }
        }
        
    }
}

client

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

/**
 * TCP 客户端
 */
public class TCPClient {
    // 服务器端 IP
    private static final String ip = "127.0.0.1";

    // 服务器端口号
    private static final int port = 9003;

    public static void main(String[] args) throws IOException {
        // 1.创建 tcp 客户端,并且连接到服务器端
        Socket socket = new Socket(ip, port);

        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(socket.getInputStream()));
             BufferedWriter writer = new BufferedWriter(
                     new OutputStreamWriter(socket.getOutputStream()));
             Scanner scanner = new Scanner(System.in);
        ) {
            while (true) {
                System.out.print("英文:");
                String msg = scanner.nextLine();
                // 2.发送消息给服务器端
                writer.write(msg + "\\n");
                writer.flush();
                // 3.接收服务器响应的内容
                String serMsg = reader.readLine();
                System.out.println("中文:" + serMsg);
            }
        }
    }
}

实现简易版HTTP

在这里插入图片描述

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 简易版 HTTP
 */
public class CustomHTTP {
    // 端口号
    private static final int port = 9004;

    public static void main(String[] args) throws IOException {
        // 1.创建一个 tcp 服务器
        ServerSocket serverSocket = new ServerSocket(port);
        System.out.println("服务器已启动");
        // 2.等待客户端的连接
        Socket socket = serverSocket.accept();
        // 3.得到两个读写对象
        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(socket.getInputStream()));
             BufferedWriter writer = new BufferedWriter(
                     new OutputStreamWriter(socket.getOutputStream()))
        ) {
            // 读取首行信息【方法类型 URL HTTP版本号】
            String firstLine = reader.readLine();
            if (firstLine != null && !firstLine.equals("")) {
                String[] fLine = firstLine.split(" ");
                // 读取到请求方法的类型
                String method = fLine[0];
                // 读取到 URL
                String url = fLine[1];
                // 读取 HTTP 版本号
                String httpVer = fLine[2];
                System.out.println(String.format("读取到客户端请求,方法类型:%s,URL:%s,版本:%s",
                        method, url, httpVer));
                // 4.业务逻辑处理
                String content = "<h1>未知</h1>";
                if (url.contains("404")) {
                    content = "<h1>没有找到此页面</h1>";
                } else if (url.contains("200")) {
                    content = "<h1>你好,世界!</h1>";
                }
                // 5.将结果打印到浏览器上
                // 写入首行信息
                writer.write(httpVer + " 200 ok\\n");
                // 写入 Head(Content-Type/Content-Length)
                writer.write("Content-Type: text/html;charset=utf-8\\n");
                writer.write("Content-Length: " + content.getBytes().length + "\\n");
                // 写入空行
                writer.write("\\n");
                // 写入 body
                writer.write(content);
                writer.flush();
            }
        }
    }
}

以上是关于网络初始b的主要内容,如果未能解决你的问题,请参考以下文章

unity动画一个片段播放完怎么让它不会到初始状态

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

如何在使用cardview的片段中初始化gridlayoutmanager?

我想在每次选择底部导航项时初始化片段