目录

  • 1.内容介绍
  • 2.计算机网络
  • 3.网络编程相关术语
    • 3.1.IP地址
    • 3.2.Port端口
    • 3.3.URL统一资源定位符
    • 3.4.TCP传输控制协议
    • 3.5.UDP用户数据报协议
    • 3.6.TCP与UDP的区别和联系
  • 4.Socket编程
    • 4.1.什么是Socket
    • 4.2.TCP编程
  • 5.HTTP协议
    • 5.1.Http报文[请求头]
    • 5.2.Http请求报文
    • 5.3.Http响应报文
  • 6.Tomcat模拟
    • 6.1.访问方式引入
    • 6.2.实现思路
    • 6.3.实现代码
  • 7.课程总结
    • 7.1.重点
    • 7.2.难点
    • 7.3.如何掌握
    • 7.4.排错技巧
  • 8.常见问题
  • 9.课后练习
  • 10.面试题
  • 11.扩展知识或课外阅读推荐(可选)
    • 11.1.扩展知识
    • 11.2.课外阅读

Web基础-网络编程&Socket&Http&Tomcat

1.内容介绍

1. 计算机网络; (了解)
2. 网络编程相关术语; (了解)
3. TCP协议编程; (掌握)
4. UDP协议; (了解)
5. TCP与UDP的区别; (掌握)
6. Http协议; (掌握)
7. Tomcat模拟; (了解)

2.计算机网络

  1. 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,实现资源共享和信息传递的计算机系统;
  2. Java中专门提供java.net包,方便开发网络程序。Java的网络编程包括了两种通信协议:
    TCP(Transmission Control Protocal):传输控制协议
    UDP(User Datagram Protocol):用户数据协议
  3. 网络使用场景
    QQ、微信、视频电话…
    看视频、听音乐、打游戏…
    买东西、卖东西…
    学习、解决问题…
    衣食住行,生老病死…
    总结:网络改变生活,大大提高了办事效率;

3.网络编程相关术语

  1. 两台计算机进行网络通信需要满足一下条件:
    两台主机需要有一个唯一的标识:也就是IP地址,用来表示所处的身份和位置
    需要有共同的语言:协议(TCP/IP)
    都需要有相应的端口号:port
  2. 一台主机上可以运行多个应用程序,如何辨别不同应用程序的通信,就是通过端口号port来进行区分;

3.1.IP地址

  1. 为实现网络中不同计算机之间的通信,每台计算器都必须有一个唯一的标识,那就是IP地址(公网IP),这就相当于每个人的手机号码一样。例如:192.168.0.1
  2. IP分以下两个大类:
    (1)IPv4:32位,分4段,(每段的范围0-255)0~255之间的十进制表示。使用4个8位的二进制数据表示,每8位之间使用圆点隔开,每个8位整数可以转换成一个0~255的十进制整数,因此我们一般看到的IP地址类似:192.168.1.1(这4段组成的个数有限度(42.28亿,全世界人口76亿左右),可能会不够用,就出现了Ipv6);
    (2)IPv6:128位,分8段,0000~FFFF的十六进制数值,冒号分割,如:1080:0:0:0:8:800:200C:417A;
  3. IP地址号段分类:A类留给政府机构,B类分配给中等规模的公司,C类分配给任意需要的人,D类用于组播,E类用于实验,给类可容纳的地址数目不同:
  4. 常用方法(主要了解获得IP地址对象的方法)
    static InetAddress getLocalHost() – 返回本地主机IP
    static InetAddress getByName(String host) – 根据主机名或域名获取IP
    static InetAddress getByAddress(byte[] addr)-- 根据一个ip地址获得一个IP地址对象
    boolean isReachable(int timeout) – 测试是否能在指定时间内连通该地址 (类似ping)
    练习:IP地址的相关操作

注:

  1. 外网IP是全世界唯一的IP地址,仅分配给一个网络设备(计算机、交互机、路由器、打印机、光纤等)。而内网IP是由路由器分配给每一部内部使用的IP地址,而内网的所有用户都是通过同一个外网IP地址进行上网的;

  2. 内网的IP地址每个人的都不一样,Internet上的用户也无法直接访问到内网用户。简单来说呢,外网IP就是标示了您在整个互联网上的地址,就相当于小区的地址,而内网IP呢,就是标识着您在局域网里面的地址,也就是小区内的几栋几楼几号房子;

  3. 在局域网中,每台电脑都可以自己分配自己的IP,这个IP只在局域网中有效。而如果你将电脑连接到互联网,你的网络提供商(ISP)的服务器会为你分配一个IP地址,这个IP地址才是你在外网的IP。两个IP同时存在,一个对内,一个对外;
    4.区分内网和公网IP的区别,公网IP是全球唯一的,而内网IP只是再局域网内有效,不具有公网IP的作用。查询公网IP地址:www.ip138.com

3.2.Port端口

  1. 端口port用来区分不同的应用程序,端口号范围为0~65535,其中0~1023被系统所保留,如果自定义端口号,建议为1023以后的;
  2. 注意:
    (1)同一台机器上不能有两个程序使用同一个端口,会冲突;
    (2)以后开发中最好记住我们用到过的常用软件的端口,避免我们知己设定端口的时候和他们冲突。例如tomcat:8080/80,mysql:3306等;

3.3.URL统一资源定位符

  1. 什么是URL:URL(Uniform Resource Locator)统一资源定位符,可以直接使用此类找到互联网上的资源如一个简单的网页。一般由:协议名,资源所在主机,端口,资源名等部分组成。如:
    http://itsource.cn:80/class_info/java_jichu.html
    互联网的一个绝对地址:找一个资源
  2. URL类中的常用方法:
    URL(String protocol, String host, int port, String file)
    URL(String url)
    InputStream openStream() :打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream;
    更多方法请查看URL对应的API文档;
  3. 通过URL读取网络文件数据体验:
    创建指定连接的URL对象;
    从URL对象上得到输入流;
    循环,从输入流中获得数据并打印(或者保存到本地磁盘中:相当于一个资源下载);
    练习:URL编程(将指定URL地址的页面下载下来)
public void testURL() throws Exception {//创建输入流URL url = new URL("https://www.douban.com/");InputStream in = url.openStream();//获取输出流FileOutputStream out = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\豆瓣.html");//实现下载/*byte[] buff = new byte[1024*10];int len = -1;while((len=in.read(buff))!=-1){out.write(buff, 0, len);}*/IOUtils.copy(in, out);//需要导入commons-io的jar包//释放资源in.close();out.close();
}

4.URLEncoder与URLDecoder

(1)从上面的示例中我们可以看到,地址栏里的英文和数字能正常显示,可是汉字不再显示汉字。那是因为对汉字进行了编码操作。一般在网络程序开发中传递中文时使用到URLEncode;


(2)测试体验:编码 – URLEncode 和 URLDecode

3.4.TCP传输控制协议

TCP协议的引入:现在两台计算机已经可以连接上了,那怎样让数据从一端传送到另外一端?(TCP和UDP协议)

  1. TCP协议是Transmission Control Protocol传输控制协议,TCP是一种面向连接的、可靠的、基于字节流的传输层(Transport layer)通信协议。
  2. 当客户和服务器彼此交互数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据,TCP 协议使用超时重传、数据确认等方式来确保数据包被正确地发送至目的端,故而效率低,速度慢;
  3. TCP可靠传输协议,不丢包,经常用来传输文件(回值内部处理),缺点是效率低,慢,而且占用资源,相当于打电话;

3.5.UDP用户数据报协议

  1. UDP(User Datagram Protocol)是一种无连接、不可靠、基于数据报的用户数据协议。
  2. UDP在传输数据报前不用在客户和服务器之间建立一个连接。它只是把数据报发送出去,但是并不能保证他们能到达目的,并且没有超时重发机制,故而传输速度很快;
  3. UDP不可靠传输协议,容易丢包。但是效率高,快,占用资源少。一般游戏中数据采用UDP传输数据,相当于快递;

3.6.TCP与UDP的区别和联系

  1. 首先它们都是传输层的协议;
  2. TCP 协议可靠,UDP 协议不可靠。可靠即指数据由A发送到B,是否能确保数据真的有送达到B;TCP 协议使用超时重传、数据确认等方式来确保数据包被正确地发送至目的端。而 UDP 协议无法保证数据从发送端正确传送到目的端,如果数据在传输过程中丢失或者目的端通过数据检验发现数据错误,则UDP协议只是简单地通知应用程序发送失败。对于 TCP 协议拥有的超时重传、数据确认等需要应用程序自己来处理这些逻辑;
  3. TCP 是面向连接的,UDP 是无连接的。这也比较好理解,因为 TCP 连接需要经历"三次握手";
  4. TCP 服务是基于流的,而UDP是基于数据报的,基于流的数据没有边界(长度)限制,而基于数据报的服务,每个UDP数据报都有一个长度,接收端必须以该长度为最小单位将其所有内容一次性读出;
  5. 总之:TCP 协议为应用层提供可靠的、面向连接的、基于流的服务。而 UDP 协议则与 TCP 协议完全相反,它为应用层提供不可靠、无连接和基于数据报的服务;

4.Socket编程

4.1.什么是Socket

  1. 网络编程实现了客户端与服务端之间的沟通(接收和发送数据),而在网络编程中使用最多的就是Socket,应用程序可以通过它发送或接收数据。像QQ,MSN这些网络应用都使用了Socket技术;
  2. Socket通常称作"套接字",用于描述IP地址和端口。应用程序通常通过"套接字"向网络发出请求或者应答网络请求;
  3. Socket是Java实现数据通信的API,而TCP/UPD是通信协议。用Socket可以实现TCP(或者UDP)通信。 但是TCP或者UDP通信也可以不用Socket实现;
  4. Java平台为我们提供了一组强大的类,方便我们使用Socket进行网络程序的开发;Socket和ServerSocket类库位于java.net包中。ServerSocket是服务端套接字,Socket是客户端套接字。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话;

4.2.TCP编程


编写步骤:
1.服务端创建ServerSocket;
2.通过调用ServerSocket的accept方法监听客户端的连接;
3.客户端创建Socket并指定服务端的地址以及端口来建立与服务端的连接;
4.当服务端accept发现客户端连接后,获取对应该客户端的Socket;
5.双方通过Socket分别获取对应的输入与输出流进行数据通讯;
6.通讯结束后关闭连接;
服务器端:

public class Server {ServerSocket serverSocket;//构造器:初始化服务器(如果端口被占用就报错)public Server() throws IOException {System.out.println("初始化服务端....");serverSocket = new ServerSocket(8088);System.out.println("服务器初始化成功...");}//测试的方法:循环的监听客户端的接入public static void main(String[] args) throws IOException {Server server = new Server();server.start();//服务器开始工作的地方}//服务端执行业务的方法private void start() throws IOException {//开始监听客户端的连接System.out.println("等待一个客户端的连接....");//监听一个客户端的上线,返回值为客户端的SocketSocket socket = serverSocket.accept();//获取客户端的IP地址String ip = socket.getInetAddress().getHostAddress();System.out.println("一个客户端已经连接上了,ip地址是:" + ip);//获取一个输入流(接收数据  字节流 -- 字符流 -- 缓存流)InputStream in = socket.getInputStream();InputStreamReader isr = new InputStreamReader(in,"UTF-8");BufferedReader br = new BufferedReader(isr);//用这个类可以一次性读取一行字符串String line = br.readLine();//可以一次性读取一行System.out.println("客户端说:" + line);  }
}

客户端:

public class Client {Socket socket;//初始化客户端public Client() throws IOException {System.out.println("初始化客户端...");socket = new Socket("localhost", 8088);System.out.println("已经连接上服务端");}//测试的public static void main(String[] args) throws IOException {Client client = new Client();client.start();}//客户端执行业务的方法private void start() throws IOException {//客户端获取了一个输出流OutputStream out = socket.getOutputStream();OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");//可以传输中文
//os.write("你好,服务器\n");//os.flush(); //刷新缓冲区,强制写出缓冲区的内容
/*采用基于TCP的c/s类型socket编程,client发出消息,在Server中接收,并且在接收时采用readline()方法时需要注意,readline()方法要读到分隔符才会完成读取操作,因此如果client采用的是write()方法,则需要在write()方法的括号中加入分隔符,如回车(‘\n’),例如write("示例字符串\n")。也可以直接使用PrintWriter类的println方法,该方法默认由程序在结尾处加入分隔符*/PrintWriter pw = new PrintWriter(osw,true);//自动行刷新(1.必须为true 2.println)pw.println("你好服务器!!!");//一次性写一行}
}

5.HTTP协议

  1. TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据;
  2. Http协议是基于TCP之上的,当浏览器须要从server获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到server的连接通道。当本次请求需要的数据完成后,Http会马上将TCP连接断开,这个过程是非常短的。所以Http连接是一种短连接,是一种无状态的连接。所谓的无状态,是指浏览器每次向server发起请求的时候,不是通过一个连接,而是每次都需要建立一个新的连接;
  3. 我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等;
  4. HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送响应的信息给客户端或浏览器;
    注意:浏览器给服务器发送数据是一次请求(request)。服务器给浏览器反馈数据是一次响应(response);

5.1.Http报文[请求头]

  1. 协议是用来定义数据传输的格式,那么按照一定格式形成的数据包即报文,也可以叫数据报;
  2. HTTP 报文分三个部分:起始行(请求行 – 响应行/状态行),头部(请求头/消息头 – 响应头/消息头),主体(请求体/实体内容 – 响应体/实体内容);
  3. HTTP 报文分为请求报文和响应报文;

5.2.Http请求报文



说明:

  1. 请求方法(也叫请求方式)有很多,后期需要掌握get和post两种即可;
  2. URL(Uniform/Universal Resource Locator)是统一资源定位符,俗称请求网址。URI(Uniform Resource Identifier) 是统一资源标识符,俗称请求资源路径。http://localhost:8080/myweb/hello.html以上web地址,加粗部分+非加粗部分=URL。非加粗部分=URI;
  3. 与Http1.0不同(连接一次,请求一次,响应一次。响应完毕,马上断开连接。如果还需要请求,需要重新连接),从HTTP/1.1(连接一次,请求多次,响应多次)起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完毕后。client和server之间用于传输HTTP数据的TCP连接不会关闭,假设client再次訪问这个server上的网页,会继续使用这一条已经建立的连接。但Keep-Alive不会永久保持连接。它有一个保持时间。能够在不同的server软件(如Apache)中设定这个时间;
  4. 部分消息头:
    Accept:告诉服务器能够发送哪些媒体类型;
    Referer:告诉服务器该网页是从哪个页面链接过来的;
    Accept-Language:告诉服务器能够发送哪些语言;
    User-Agent:告诉网站服务器,访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答;
    Content-type:用于描述该请求来自于表单默认的提交数据的格式(application/x-www-form-urlencoded);
    Host:HTTP 1.1 协议中新增的一个请求头,主要用来实现虚拟主机技术。同一台服务器部署多个服务,可以依靠虚拟主机来区分,而Host 请求头决定着访问哪个虚拟主机;
    Content-Length:用于描述HTTP消息实体的传输长度;
    Connection:为keep-alive在很多情况下能够重用连接,减少资源消耗,缩短响应时间。所以在HTTP1.1中缺省就是支持keep-alive的;
    Cookie:客户端用它向服务器传送一个令牌。注意它并不是真正的安全首部,但确实隐含了安全功能;

5.3.Http响应报文


  1. 状态码:
    (1)100~199 – 信息性状态码
    (2)200~299 – 成功状态码
    (3)300~399 – 重定向状态码
    (4)400~499 – 客户端错误状态码
    (5)500~599 – 服务器错误状态码

  2. 以下是几个常见的状态码:
    (1)200 OK – 你最希望看到的,即处理成功;
    (2)302 found – 重定向;
    (3)400 Bad Request – 客户端请求有语法错误,不能被服务器所理解;
    (4)403 Forbidden – 服务器收到请求,但是拒绝提供服务;
    (5)404 Not Found – 请求资源找不到;
    (6)500 Internal Server Error – 服务端代码异常;

  3. 部分响应头:
    Server:服务器类型;
    Content-Type:响应的类型;
    Date:服务器产生响应的日期;
    Transfer-Encoding:传输编码;

6.Tomcat模拟

6.1.访问方式引入

  1. 我们学习的html,html是放入浏览器运行。我们现在访问方式是通过file:///C:/Users/123/Desktop/login.html 即是通过文件协议访问本地的的login.html数据;
  2. 或者以后学习javaweb的之后,我们这些index.html页面都需要放入服务器里面,然后浏览器通过http协议来访问页面,比如:http://ip地址:端口号/login.html来进行访问;
  3. 如果需要实现这个种效果,需要通过socket可以模拟服务器;

6.2.实现思路

1.如果要完成上面的效果,我们首先必须通过socket开启监听端口服务,一旦我们在浏览器输入http://localhost:8088/login.html 这个时候就通过socket来接收,找到服务器的login.html页面 ,解析出来,把内容写到浏览器里面;

6.3.实现代码

public class TomcatServer {private ServerSocket ss;//构造器中初始化服务器的套接字public TomcatServer() {try {//初始化服务器,指定端口,访问时用该端口ss = new ServerSocket(8088);} catch (IOException e) {e.printStackTrace();}}public void start() throws IOException{//监听客户端的访问Socket socket = ss.accept();//创建输出流OutputStream os = socket.getOutputStream();OutputStreamWriter osw = new OutputStreamWriter(os,"UTF-8");PrintWriter pw = new PrintWriter(osw,true);//创建输入流:根据用户的访问找到服务器中的资源,用流的方式写出去File file = new File("C:\\Users\\Administrator\\Desktop\\server\\login.html");InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8");BufferedReader br = new BufferedReader(isr);//如何输出到页面呢?设置响应信息 -- 不然就只能输出到控制台或文本中,但是用户就需要在页面中看到内容,所以需要设置响应信息pw.println("http1.1 200 OK");//1.设置响应头:协议版本 状态码 状态描述pw.println("Content-Type: text/html;charset=UTF-8");//2.设置响应类型和字符编码
//      pw.println("Content-Length: "+file.length());//可以不写pw.println();//3.结束头部信息 -- 表示结束头部信息,接下来开始写内容//响应的内容String len = null;while((len=br.readLine())!=null){pw.println(len);}//       pw.println("<h1>你好</h1>");//关流pw.close();br.close();}public static void main(String[] args) throws IOException {TomcatServer web = new TomcatServer();while(true){web.start();}}
}

7.课程总结

7.1.重点

1.TCP编程;
2.TCP与UDP区别;

7.2.难点

1.TCP编程;

7.3.如何掌握

1.课上认真听课;
2.完成课后练习;
3.抓住课程重点;

7.4.排错技巧

1.通过异常和错误找出问题,分析问题,解决问题;
2.端口号被占用问题;

8.常见问题

9.课后练习

1.课堂代码1-2遍;

10.面试题

1.简述TCP与UDP区别; (预计5分钟完成)
2.什么是Socket; (预计5分钟完成)
3.说出5个常见的状态码,并简单描述下; (预计5分钟完成)

11.扩展知识或课外阅读推荐(可选)

11.1.扩展知识

11.2.课外阅读

A031_web基础_网络编程_Socket_Http_Tomcat相关推荐

  1. Go语言基础之网络编程

    文章目录 Go语言基础之网络编程 互联网协议介绍 互联网分层模型 物理层 数据链路层 网络层 传输层 应用层 socket编程 socket图解 Go语言实现TCP通信 TCP协议 TCP服务端 TC ...

  2. 计算机网络——网络基础_网络命令的使用(配置主机IP、ipconfig、ping、tracert、arp实战)

    实验二  网络基础_网络命令的使用 一.配置主机的IP地址 实验目的 1.能打开Windows 10的命令窗口,在窗口中执行命令. 2.掌握IP设置的基本方法. 实验装置和工具 一台连入本地局域网或互 ...

  3. JAVA基础11 网络编程

    JAVA基础 11.网络编程 1.什么是网络?网络模型?网络四要素? 1.网络 在计算机领域中网络是信息传输,接收,共享的虚拟平台,通过它把各个点,面,体的联系到一起,从而实现这些资源的共享. 资源的 ...

  4. python语言编程基础视频_网络编程-5_ Python系列视频(一)——Python语言基础_Python视频-51CTO学院...

    通过学习,对Python有一定的了解,学习Python语法,可以使用Python原生语言开发项目.对于Python的应用于开发有一个系统的认知,对于未来的发展方向有清晰的认识.主要知识点包括基本语法. ...

  5. 黑马程序员_java总结_网络编程基础

    ----------- android培训.java培训.java学习型技术博客.期待与您交流! ------------ 现在总结网络编程.在网络通信中,人们把网络通信分为了多个层.为了方便理解,我 ...

  6. linux c语言 udp 接收和发送数据用同一个端口_网络编程基础入门及TCP,UDP

    1.网络编程入门 1.1 网络编程概述 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享 ...

  7. tcp丢包率_网络编程 | TCP/IP基础知识

    在2017年10月深圳 Cocos 沙龙上,有幸结识了社区中大名顶顶的Colin,Shawn在论坛上第一次看到Colin的团队用CocosCreator制作的<热血暗黑>时就被深深地震撼到 ...

  8. 2022.02.09_Java学习总结_网络编程、正则表达式

    1. 网络编程 1.1 概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序. Java提供的网络类库,可以实现无痛的网络连接, ...

  9. 第六周 Java语法总结_设计原则_工厂模式_单例模式_代理模式(静态代理_动态代理)_递归_IO流_网络编程(UDP_TCP)_反射_数据库

    文章目录 20.设计原则 1.工厂模式 2.单例模式 1)饿汉式 2)懒汉式 3.Runtime类 4.代理模式 1)静态代理 2)动态代理 动态代理模板 21.递归 22.IO流 1.File 2. ...

最新文章

  1. html插入不规则表格,如何构建HTML表格中的不规则形状?
  2. Arduino文档阅读笔记-WeMos D1 ESP8266 WIFI开发板入门
  3. 关于OAuth2的几个问题
  4. 计算机科学与技术 课表 武汉,欢迎访问武汉理工大学计算机科学与技术学院
  5. python决策树分类 导入数据集_BPNN、决策树、KNN、SVM分类鸢尾花数据集Python实现...
  6. 【python基础】--常用数据结构
  7. pod的介绍、命令行创建pod
  8. 说说在 jBPM 工作流中如何实现【会签】功能
  9. CAN总线物理值与原始值
  10. 七问西方主流经济学,考考你的经济学常识
  11. R语言——矩阵中删除缺省值可用的函数
  12. Swift使用UserDefaults存储,报错 Fatal error: ‘try‘ expression unexpectedly raised an error: Swift.Decoding
  13. 独立IP、特产浏览量(PV)、访问次数(VV)、独立访客(UV)有什么区别?
  14. 网络工具netstat与ss
  15. 投影分带方法(我国的6°、3°分法)
  16. 华硕主板驱动在哪里下载?(ROG STRIX B250I)
  17. 逆天!看看现在可以买到的13款机器人有多厉害! | 关注
  18. Neo4j学习(2)--简单入门
  19. uni-app开发流程一(项目搭建)
  20. 深圳大数据学习:泛型 --【千锋】

热门文章

  1. cts游戏手机版_CTS6遨游中国2豪华版下载,CTS6遨游中国2手机版官网豪华版安装包 v1.4 - 游戏盒子下载站...
  2. 开放下载丨悬镜安全携手中国信通院发布《软件供应链安全白皮书(2021)》
  3. 微软有没有类似excel服务器的产品,除了Win,Office,微软还有哪些牛哄哄的产品?...
  4. UP9601台湾力智UPI首颗QC2.0+DC/DC+识别快充三合一车充芯片方案
  5. Andorid自带ActionBar的用法解析
  6. 国际数字影像文创产业园现对外招商,入驻即享政策扶持
  7. C语言实现OOP——轻量级的面向对象 C 语言编程框架 LW_OOPC 介绍(二)
  8. 32位java怎么改_java修改24位深度png图片为32位深度
  9. python之查看图像位深度,以及改变图像位深度
  10. the default discovery settings are unsuitable for production use; at least one of [discovery.seed_h