java 网络编程总结

news2024/11/23 6:30:55

目录

一、拾枝杂谈

        1.网络通信 : 

        2.网络 : 

        3.IP : 

        4.IPv4的ip地址分类 : 

        5.域名和端口 : 

        6.网络协议 : 

二、网络编程

        1.InetAddress : 

                1° 常用方法 : 

                2° 代码演示 :  

        2.Socket : 

                1° 概述 : 

                2° 代码演示 : 

                eg1 : 客户端连接服务端

                eg2 :  结束标记

                eg3 : 网络传输文件

        3.netstat:  

        4.UDP网络通信 : 


一、拾枝杂谈

        1.网络通信 : 

        网络通信是指,将一台设备(Host1)中的数据通过网络传输到另一台设备(Host2)java.net包下提供了许多用于完成网络通信的类或接口

        相关流程图如下 : 

        2.网络 : 

        两台或两台以上的设备通过一定物理设备(交换机,网关服务器等等)连接起来构成了网络(强调多台计算机构成的网状结构

        根据网络的覆盖范围及其复杂度的不同,网络大致分为三类——

        1° 局域网 : 覆盖范围最小,可能是一个机房,一个公司的内网,也可能是一个学校的校园网。

        2° 城域网 : 覆盖范围较大,可以覆盖整个城市。

        3° 广域网 : 覆盖范围最大,可以覆盖整个国家,甚至覆盖全球。典型代表是万维网(World Wide Web,简称3w)。

        3.IP : 

        IP全称Internet Protocol,网络协议;IP地址就是“IP address”。IP的作用是标识网络中的每台计算机(主机)

        在Windows操作系统下,可以在交互式命令接口(cmd)输入ipconfig指令来获取当前主机的ip地址。如下图所示 : 

        ip又常见两种——IPv4和IPv6.

        1° IPv4协议以“点分十进制(xx.xx.xx.xx)”表示ip地址。即用4个字节来表示4个数,每个数的范围就是每个字节可以表示的范围(0~255)。 

             IPv4协议下,ip地址由网络地址 + 主机地址组成,比如上图画蓝线部分,“192.168.89.”表示网络地址,最后的“134”表示主机地址。

        2° IPv6协议的诞生是为了解决IPv4协议“网络地址资源受限”问题,它是互联网工程任务组设计的用于替代IPv4的下一代网络协议(目前仍处于替代的过渡阶段)。IPv6的地址数量,号称可以为全世界的每一粒沙子编上一个地址。IPv6的诞生也解决了多种接入设备接入互联网的障碍。

             IPv6协议下,ip地址一般由16进制表示,因此每两位就代表一个字节,每个IPv6协议下的ip地址均有16个字节(128位)表示,长度是IPv4协议下的四倍。

        4.IPv4的ip地址分类 : 

        IPv4协议下,ip地址由网络地址和主机地址构成,根据它们的权重不同,IPv4协议的ip地址可分为A,B,C,D,E五类。如下图所示 : 

        PS : 127.0.0.1表示本机地址。 

        5.域名和端口 : 

        1° 域名——公司拥有自己的主机,为了便于用户访问公司主机,通过诸如HTTP协议将将主机的ip地址映射为“域名”。eg : "cn.bing.com"就是必应搜索的域名。域名相比ip地址更易记忆。

        2° 端口——用于标注计算机上某个特定的网络程序(网络服务)的编号。不同的网络程序一般监听不同的端口

             端口以整数形式表示,表示范围是0~65535(2个字节表示,0~2^16 - 1)。其中,0~1024的端口已经被占用,因此,在网络开发中,不建议使用0~1024的端口,eg:ssh 22,ftp(文件传输)21,smtp(邮件)25,http 80。

             常见网络程序的端口号——

                ①mysql : 3306;

                ②sqlserver : 1433;

                ③oracle : 1521;

                ④tomcat : 8080;

        PS : 用户访问业务主机,实际是通过IP + 端口的形式访问的;通过IP可以找到主机所在位置,通过端口可以使用主机上提供的对应网络服务。如下图所示 : 

        6.网络协议 : 

        网络通信协议,通常指TCP/IP协议(全称“Transmission Control Protocol / Internet Protocol协议”)。中文是“传输控制协议 / 因特网互联协议”,又叫网络通信协议。TCP/IP协议是Internet最基本的协议,是Internet国际互联网络的基础。简单地说,就是由网络层的IP协议和传输层的TCP协议组成。

        关于TCP和UCP的区别——

        1° TCP : 传输控制协议

                使用TCP协议前,需要建立TCP连接,形成数据传输通道;

                传输数据前进行了"三次握手",因此是可靠的.

                在连接中可进行大量数据的传输;

                数据传输完毕后, 需释放掉已建立的连接,因此效率低.

                eg : call

        2° UCP : 用户数据协议

                不需要建立连接, 而是将数据, 源, 目的封装成数据报;

                每个数据报的大小限制在了64kb内, 不适合大量数据的传输;

                因无需连接, 因此不可靠;

                数据传输完毕后, 无需释放资源(因为不面向连接), 因此速度快.

                eg : message


二、网络编程

        1.InetAddress : 

                1° 常用方法 : 

        ①getLocalHost : 获取当前主机的InetAddress对象,直接打印InetAddress对象默认输出结果为当前主机名 + 当前主机的ip地址(IPv4协议)。

        ②getByName : 通过指定主机名获取对应的InetAddress对象。

        ③getByName : 同上;也可以通过指定域名来获取对应的InetAddress对象。

        ④getHostAddress : 返回当前InetAddress对象的IP地址。

        ⑤getHostName : 返回当前InetAddress对象的主机名/域名。

                2° 代码演示 :  

                以InetAddress_Demo类为演示类,代码如下 : 

package csdn.advanced.netEX;

import java.io.IOException;
import java.net.InetAddress;

public class InetAddress_Demo {
    public static void main(String[] args) throws IOException {
        //1. 获取本机的InetAddress对象(静态方法getLocalHost())
        /*
            输出结果 : 当前主机名 + 当前主机的ip地址(IPv4协议)
         */
        InetAddress localHost = InetAddress.getLocalHost();
        System.out.println(localHost);
        System.out.println("==================");

        //2. 获取本机的InetAddress对象, 但通过指定主机名
        InetAddress localHost_copy = InetAddress.getByName("Cyan-RA9");
        System.out.println(localHost);
        System.out.println("==================");

        //3. 根据指定域名,给出对应的InetAddress对象
        InetAddress bingHost = InetAddress.getByName("cn.bing.com");
        InetAddress baiduHost = InetAddress.getByName("www.baidu.com");
        System.out.println(bingHost);
        System.out.println(baiduHost);
        System.out.println("==================");

        //4. 根据InetAddress对象,获取对应主机的IP地址
        String address = bingHost.getHostAddress();
        String address_ = baiduHost.getHostAddress();
        System.out.println(address);
        System.out.println(address_);
        System.out.println("==================");

        //5. 根据InetAddress对象,获取对应主机的主机名/域名(最终获取到的结果取决于主机的配置)
        String hostName = bingHost.getHostName();
        String hostName_ = baiduHost.getHostName();
        System.out.println(hostName);
        System.out.println(hostName_);
    }
}

                运行结果 : 

        2.Socket : 

                1° 概述 : 

        Socket在网络编程中被称为“套接字”;Socket在开发网络应用程序中被广泛采用,因此成为了事实上的标准。

        Socket是两台机器间实现通信的端点(比喻为"接口"),通信的两端都要有Socket。网络通信其实就是Socket间的通信

        Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输。一般主动发起通信的的应用程序属于客户端;等待通信请求的属于服务端。(客户端程序和服务端程序一般位于不同的主机上)。

        服务端要先运行起来, 等待客户端的连接。

                2° 代码演示 : 

                eg1 : 客户端连接服务端

                Server_01代码如下 : 

package csdn.advanced.netEX.tcp_1;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
    TCP InputStream / OutputStream No.1
 */
public class Server_01 {
    public static void main(String[] args) throws IOException {
        //1.ServerSocket可以监听指定的端口(要求该端口没有被其他服务端程序监听)
        ServerSocket serverSocket = new ServerSocket(6666);
        System.out.println("服务端正监听6666端口,等待连接中......");

        //2.当有客户端连接被监听的端口时,返回Socket对象,程序继续运行。
        /*
            ServerSocket可通过accept方法返回多个Socket对象,
            适用于多个服务器连接客户端时的并发。
         */
        Socket socket = serverSocket.accept();
        System.out.println("Server's socket = " + socket);

        //3.若有客户端成功连接该服务端,读取客户端写入到数据通道中的数据, 并显示在控制台
        InputStream inputStream = socket.getInputStream();

        byte[] data = new byte[1024];
        int len;
        while ((len = inputStream.read(data)) != -1) {
            System.out.println(new String(data, 0, len));   //String类的一个带参构造!
        }

        //4.必须关闭流(服务端比客户端多关一个)
        inputStream.close();
        socket.close();
        serverSocket.close();
    }
}

                Client_01代码如下 : 

package csdn.advanced.netEX.tcp_1;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

/**
    TCP InputStream / OutputStream No.1
 */
public class Client_01 {
    public static void main(String[] args) throws IOException {
        /*
            1.通过“IP + 端口” 连接服务端。
            2.若连接成功,返回Socket对象。
         */
        Socket socket = new Socket(InetAddress.getLocalHost(), 6666);
        System.out.println("Client's socket = " + socket);
        /*
            3.连接成功后,通过Socket类对象的getOutputStream()方法,
              获取和socket对象关联的字节输出流对象。
         */
        OutputStream outputStream = socket.getOutputStream();
        /*
            4.利用获取到的的字节输出流对象,将指定内容输出到数据传输流中。
         */
        outputStream.write("Cyan_RA9".getBytes());  //一次写入一个字节数组
        System.out.println("客户端退出......");

        //5.必须关闭流。
        outputStream.close();
        socket.close();
    }
}

                运行效果 : 

                eg2 :  结束标记

                Server_02代码如下 : 

package csdn.advanced.netEX.tcp_2;

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

/**
    TCP InputStreamReader / OutputStreamWriter No.2
 */
public class Server_02 {
    public static void main(String[] args) throws IOException {
        //1.设置服务端程序的监听端口为8888
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务端程序正在监听8888端口,等待客户端连接......");

        //2.当有客户端连接成功时,通过accept方法返回Socket类对象
        Socket socket = serverSocket.accept();
        System.out.println("Server's socket = " + socket);

        //3.获取与socket对象关联的字节输入流对象,并利用转换流将其转换为字符输入流。
        InputStream inputStream = socket.getInputStream();
        InputStreamReader isr = new InputStreamReader(inputStream);

        //4.利用转换得到的字符输入流,读取客户端写入到数据通道中的数据。
        int data;
        while ((data = isr.read()) != -1) {
            System.out.print((char)data);
        }

        //5.获取与socket对象关联的字节输出流对象,并利用转换流将其转换为字符输出流。
        OutputStream outputStream = socket.getOutputStream();
        OutputStreamWriter osw = new OutputStreamWriter(outputStream);

        //6.利用转换得到的字符输出流对象,将数据写入到数据通道中。
        osw.write("Hello, Client? ");
        //若使用字符流,需要使用flush方法手动刷新,否则数据无法写入数据通道!
        osw.flush();
        socket.shutdownOutput();    //设置写入结束标记

        //7.关闭流
        //osw.close();
        isr.close();
        socket.close();
        serverSocket.close();

        System.out.println("\n服务端退出......");
    }
}

                Client_02代码如下 : 

package csdn.advanced.netEX.tcp_2;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;

/**
    TCP InputStreamReader / OutputStreamWriter No.2
 */
public class Client_02 {
    public static void main(String[] args) throws IOException {
        //1.通过“IP + 端口”连接服务端,若连接成功,返回Socket类对象
        Socket socket = new Socket(InetAddress.getLocalHost(), 8888);
        System.out.println("Client's socket = " + socket);

        //2.获取与socket对象关联的字节输出流对象,并利用转换流,将其转换为字符输出流。
        OutputStreamWriter osw =
                new OutputStreamWriter(socket.getOutputStream());
        /**
         * 也可以使用BufferedWriter再包装一层,
         * 使用处理流之后,可以使用newLine方法作为结束的标志,但要求读取使用readLine方法。
         *  */

        //3.利用转换得到的字符输出流对象,向数据通道中写入数据。
        osw.write("Hello, Server?");
        osw.flush();
        /*
            若使用字符流,需要使用flush方法手动刷新,否则数据无法写入数据通道!
            shutdownOutput() 方法可以告诉服务端,发送的信息到此为止了。
         */
        socket.shutdownOutput();

        //4.获取与socket对象关联的字节输入流对象,并利用转换流,将其转换为字符输入流。
        InputStreamReader isr =
                new InputStreamReader(socket.getInputStream());

        //5.利用转换得到的字符输入流对象,读取服务端写入到数据通道中的数据。
        char[] data = new char[1024];
        int cnt;
        while ((cnt = isr.read(data)) != -1) {
            String string = new String(data, 0, cnt);
            System.out.println(string);
        }

        //6.关闭流
        isr.close();
        //osw.close();
        socket.close();

        System.out.println("客户端退出......");
    }
}

                运行结果 : 

                eg3 : 网络传输文件

                以传入某图片为例如下所示 :

                Server_03类代码如下 : 

package csdn.advanced.netEX.tcp_3;

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

/**
    TCP --- network transmission
    advanced --- BufferedXxx
 */
public class Server_03 {
    public static void main(String[] args) throws IOException {
        //1.客户端监听端口
        ServerSocket serverSocket = new ServerSocket(7777);
        System.out.println("服务端正监听7777端口,等待客户端连接...");

        Socket socket = serverSocket.accept();
        System.out.println("Server's socket = " + socket);

        //2.获取与socket对象关联的字节输入流,读取客户端写入到数据通道中的数据。
        InputStream inputStream = socket.getInputStream();
        OutputStream outputStream = socket.getOutputStream();//4.步骤
        BufferedOutputStream bos =
                new BufferedOutputStream(new FileOutputStream("D:\\JAVA\\IDEA\\fileEX\\demo2.jpg"));

        byte[] data = new byte[1024];
        int cnt;

        //3.将读取到的图片写入到本地
        while ((cnt = inputStream.read(data)) != -1) {
            bos.write(data, 0, cnt);
        }

        //4.向客户端发送“收到图片”,并退出服务端。
        outputStream.write("Received the picture".getBytes());
        socket.shutdownOutput();    //结束标记

        //5.不要忘记关闭流(后打开的流先关闭)
        bos.close();
        outputStream.close();
        inputStream.close();
        socket.close();
        serverSocket.close();

        System.out.println("服务端退出...");
    }
}

                Client_03类代码如下 :

package csdn.advanced.netEX.tcp_3;

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

/**
 * TCP --- network transmission
 */
public class Client_03 {
    public static void main(String[] args) throws IOException {
        //1.通过“IP + 端口”,连接服务端。
        Socket socket = new Socket(InetAddress.getLocalHost(), 7777);
        System.out.println("Client's socket = " + socket);

        //2.向服务端发送一张图片(把从客户端读取到的文件写入到数据通道中)
        BufferedInputStream bis =
                new BufferedInputStream(new FileInputStream("D:\\JAVA\\IDEA\\fileEX\\demo.jpg"));
        InputStream inputStream = socket.getInputStream();//3.步骤
        OutputStream outputStream = socket.getOutputStream();

        byte[] data = new byte[1024];
        int cnt;

        while ((cnt = bis.read(data)) != -1) {
            outputStream.write(data, 0, cnt);
        }
        socket.shutdownOutput();    //结束标记

        //3.获取与socket对象关联的字节输入流,读取服务端写入到数据通道中的信息
        byte[] message = new byte[1024];
        while ((cnt = inputStream.read(message)) != -1) {
            String s = new String(message, 0, cnt);
            System.out.println(s);
        }

        //4.关闭流,客户端退出
        outputStream.close();
        inputStream.close();
        bis.close();
        socket.close();

        System.out.println("客户端退出...");
    }
}

                运行效果 : 

        3.netstat:  

        netstat -an 指令可以查看当前网络情况,包括端口监听和网络连接情况;

        netstat -an | more 指令可以分页查看当前网络情况(按下空格翻页,直到显示完毕,也可以通过Ctrl + c快捷键直接退出指令)。

        netstat指令需要在DOS系统下执行(小黑框)。

        如下图所示 : 

        其中——

        Proto = Protocol,表示当前端口的协议。 

        Local Address 和 Foreign Address 分别表示本机地址(服务端)和外部地址(客户端), 前四位表示IP,第五位表示监听的端口

        State表示状态Listening表示当前程序正在指定端口进行监听,等待客户端连接Established表示当前程序监听的端口已有客户端连接

        如果想查看正在监听端口的具体程序,需要使用管理员权限运行DOS,然后使用netstat -anb指令,如下图所示 : 

        PS : 在客户端与服务端连接期间调用netstat指令,可以得到结论——

        当客户端连接到服务器端后,实际上客户端也是通过一个端口与服务端进行通讯的,这个端口是TCP/IP协议来自动分配的。 

        4.UDP网络通信 : 

        DatagramSocket类 和 DatagramPacket(数据报)类实现了基于UDP协议的网络通讯。UDC数据报是通过DatagramSocket套接字的send和receive方法来进行发送和接收的;系统不保证数据报具体的发送情况。(一个数据报最大64kb)

        DatagramPacket对象中封装了数据报,其中包含了数据,发送端的IP + 端口以及接收端的IP + 端口。正因为每个数据报中都给出了完整的地址信息,因此无需像TCP一样建立连接。DatagramPacket类构造器如下 : 

        PS : 

        在UDP网络通信中不再有服务端和客户端的概念,而是数据的发送端和接收端,并且发送端和接收端不是固定的

        2° UDP编程中,接收数据(receive) 和 发送数据(send) 是通过DatagramSocket对象来完成的。

        在发送数据时,会先将数据打包到DatagramPacket对象中在接收数据时,需要先对DatagramPacket对象进行拆包。(拆包——getLength(),getData(),String带参构造) 

        4° DatagramPacket对象可以指定端口来接收数据。

        最后需要关闭DatagramSocket

        System.out.println("END---------------------------------------------------------------------------"); 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux设置进程自启动

systemd学习 http://www.jinbuguo.com/systemd/systemctl.html https://blog.csdn.net/sinat_35815559/article/details/102867290 常用命令 立即启动一个服务: systemctl start xxx.service立即停止一个服务: systemctl stop xxx.service重启一个服…

跌倒检测和识别4:C++实现跌倒检测(含源码,可实时跌倒检测)

跌倒检测和识别4:C实现跌倒检测(含源码,可实时跌倒检测) 目录 跌倒检测和识别4:C实现跌倒检测(含源码,可实时跌倒检测) 1. 前言 2. 跌倒检测模型(YOLOv5) (1)跌倒检测模型训练 …

第14届蓝桥杯 | 冶炼金属

作者:指针不指南吗 专栏:第14届蓝桥杯真题 🐾慢慢来,慢慢来🐾 文章目录 题目代码摸索第一次 AC 5/10第二次 AC 100% 反思 题目 链接: 4956. 冶炼金属 - AcWing题库 小蓝有一个神奇的炉子用于将普通金属 O …

【LeetCode】数据结构刷题(2)[查找链表的中间节点]

【LeetCode】数据结构刷题(2) 1.题目来源2.题目描述3.解题思路4.代码展示5.类似题目练习 所属专栏:玩转数据结构题型 博主首页:初阳785 代码托管:chuyang785 感谢大家的支持,您的点赞和关注是对我最大的支持…

自动驾驶方案及相关对标

华为: 2021年4月18日,在华为智能汽车解决方案BU新品发布会上,华为智能汽车解决方案BU总裁王军表示,华为要持续加大对汽车行业的投入,今年在研发上的投资将达到10亿美元,未来每年保持30%左右增长&#xff0…

three.js的着色器(巨详细 初学者 大白话)

three.js就不过多介绍了 可以看另一篇文章 总结就是场景 相机 和 渲染器 学起来 也比较轻松 后来看到了着色器 给我整懵乐了 一会一个API 一会一个API 都没见过 然后就一点点去学习 真的是费了好大劲了 需要知道很多新东西 才能初步知道和使用着色器 当然如果只是简单的使…

docker-harbor私有仓库的部署与管理

目录 Harbor Harbor介绍 Harbor的特性 Harbor的构成 部署Harbor 搭建本地私有仓库 Docker容器的重启策略 部署Docker-compose服务 部署Harbor服务 关于Harbor.cfg配置文件中两类参数 启动Harbor 查看 Harbor 启动镜像 创建一个新项目 在其他客户端上传镜像 维护管…

如何创建 2023 年营销日历(内含免费模板和示例)

沟通、文案撰写、社媒营销、点击付费广告、事件营销和搜索引擎排名优化有什么共同点? 它们都属于营销部门的工作范畴,而且很可能是围绕着同一个日程表进行工作排期。 你的营销团队比你想象的要大,当你考虑跨职能项目和团队成员在你整体战略…

ImageJ 用户手册——第四部分(ImageJ用户界面)

ImageJ 用户手册——第四部分(ImageJ用户界面) ImageJ用户界面工具栏(Toolbar)状态栏进度条19. 工具19.1 区域选择工具19.1.1 矩形选择工具19.1.2 圆角矩形选择工具19.1.3 圆形选择工具19.1.4 椭圆选择工具19.1.5 笔刷选择工具19.…

内网渗透基础-域环境搭建

一、环境准备 1.1虚拟机安装 Mac环境: vmware fusion;parallels desktop。 windows环境: vmware;virtualbox; 有习惯用其他软件的也都一样的,下载安装可以找百度教程。 1.2虚拟机三种网络配置模式 桥接模式&am…

塔望3W消费战略全案丨阳澄湖牌大闸蟹:承诺就是价值,打响官方第一枪

阳澄湖牌 大闸蟹 客户:苏州市阳澄湖大闸蟹营销有限公司 品牌:阳澄湖/阳澄湖牌 服务:3W消费战略 品牌全案 项目背景 苏州市阳澄湖大闸蟹营销有限公司是由苏州市相城区阳澄湖大闸蟹集团公司、苏州市阳澄湖现代农业产业园特种水产养殖有限公…

Springboot整合elasticsearch

​ 前言 elasticsearch基本介绍,这篇文章介绍了elasticsearch安装和使用。下面根据网上查来的各种资料,总结如何在springboot中使用elasticsearch。 文章中用es代替elasticsearch。 依赖 springboot版本是2.0,es版本用的是7.6.2。不同的…

专业做护眼灯的有哪些品牌?盘点专业护眼灯品牌排行

护眼灯是家庭照明必备的工具,专业做护眼灯的却不多,许多家长找不到合适的护眼灯,我就根据标准GB/T 9473-2017《读写作业台灯性能要求》,筛选出五款合适国人使用的护眼灯。 TOP1、南卡护眼台灯Pro 光源舒适度:❤❤❤❤…

电子工程有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是电子工程领域的SCI期刊推荐: IEEE Transactions on Electron Devices: 该期刊是IEEE出版社的顶级期刊,涵盖电子学、固态电子学、电子器件、材料科学等多个领域。 IEEE Transactions on Industrial Electronics: 该期刊是I…

ChatGPT写21个程序,16个有漏洞:离取代程序员还远着呢!

一、ChatGPT 生成的代码有多安全? 近年来,大型语言模型推动人工智能领域取得了巨大的进步。其中,OpenAI 打造的 ChatGPT 甫一亮相,就凭借出色的性能震惊全球。ChatGPT 不仅能够处理普通文本,还能将自然语言翻译成代码…

Linux嵌入式uboot使用tftp网络启动加载zImage、设备树

文章目录 一、前言二、Linux U-boot 相关命令(1)help 命令(2)printenv 命令(3)setenv 函数(4)saveenv 函数 三、tftp启动linux内核步骤(1)进入u-boot模式&…

使用chatgpt探索SQL注入

今天尝试使用chatgpt尝试探讨咨询一下SQL注入的问题以及如何解决。 首先问的是“作为一个安全工作人员,写一篇关于Java SQL注入以及如何预防的文章,包含所有使用SQL可能存在注入的情况” 结果,结果就是没有等到结果,直接出错了。…

数百家数科公司齐聚用友BIP技术大会,共享企业数智化领先实践

4月19日~4月21日,由用友公司主办的“2023用友BIP技术大会“在用友产业园(北京)盛大召开,用友介绍了更懂企业业务的用友BIP-iuap平台,并发布了全面数智化能力体系,助力企业升级数智化底座&#x…

15、Context

目录 一、常规gorutine控制二、context控制groutine1 - 使用context控制单个gorutine2 - context创建3 - context函数4 - Context接口5 - 使用context控制多个gorutine停止 一、常规gorutine控制 控制并发的两种方式: 使用WaitGroup:多个Goroutine执行同…

SQL经典50题总结

SQL经典50题总结 SQL经典50题总结1.数据准备50题1.查询"01" 课程比 "02" 课程成绩高的学生的信息及课程分数2.查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩3.查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩4.查询姓“…