当前位置: 首页 > news >正文

Java-day18(网络编程)

网络编程

1.概述

  • Java提供跨平台的网络类库,可以实现无痛的网络连接,程序员面对的是一个统一的网络编程环境

  • 网络编程的目的:直接或间接地通过网络协议与其他计算机进行通信

  • 网络编程的两个主要问题:

    • 1.如何准确定位网络上一台或多台计算机

      • 通信双方地址

      • 一定的规则
        TCP/IP参考模型(现实中运用)
        OSI参考模型(太过理想化,未广泛推广)

    • 2.找到主机后如何可靠高效地进行数据传输

      • TCP 可靠性高,每次传输数据多
      • UDP 速度快,可靠性低

2.要素

  • IP和端口号

    • IP: 唯一标识Internet上的计算机(回环:127.0.0.1;主机:localhost

    • 端口号: 标识正在计算机上运行的进程(程序);不同的进程有不同的端口号;端口号为0~2^16-1,0~1023被预先定义,1024~65535支持用户定义(默认数据库MySQL:3306,http:80)

    • 端口号与IP地址的组合得出一个网络套接字
      在这里插入图片描述

  • 网络通信协议

    • 计算机网络中实现通信必须有的一些约定,及网络通信协议

    • 计算机各层之间互不影响

    • TCP/IP协议簇:包含多个具有不同功能且相互关联的一组协议(以传输控制协议(TCP)和网络互联协议(IP)为主)

3.InetAddress类

InetAddress:位于java.net

  1. InetAddress用来代表IP地址,一个InetAddress的对象就代表一个IP地址
  2. 创建InetAddress类对象:getByName(String host)
  3. 获取IP地址:getHostAddress() 获取IP地址对应的域名:getHostName()

例:

import java.net.InetAddress;
import java.net.UnknownHostException;public class Test1 {public static void main(String[] args) throws Exception {                         //创建InetAddress对象InetAddress inet = InetAddress.getByName("www.bilibili.com");		//inet = InetAddress.getByName("61.240.206.10");//也可以用IP地址System.out.println(inet);//www.bilibili.com/112.83.140.13System.out.println(inet.getHostAddress());System.out.println(inet.getHostName());System.out.println();//获取本机的用户名与IPInetAddress inet1 = InetAddress.getLocalHost();System.out.println(inet1);System.out.println(inet1.getHostAddress());System.out.println(inet1.getHostName());}}

4.TCP网络通信

传输控制协议要点
  • 使用TCP协议前,须先建立TCP连接,形成传输数据通道
  • 传输前,采用“三次握手”方式,可靠
  • TCP协议进行通信的两个应用进程:客户端,服务端
  • 在连接中可进行大数据量的传输
  • 传输完成,需释放已建立的连接,效率低
    例1
package com.end.java;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;import org.junit.Test;//客户端给服务器发送信息,服务端输送此信息到控制台
public class TestTCP1 {@Test//客户端public void client() {Socket socket = null;OutputStream os = null;try {//1.创建一个Socket的对象,通过构造器指明服务器的IP地址及接收端口socket = new Socket(InetAddress.getByName("127.0.0.1"),9090);//2.getOutputStream(),发送数据,方法返回OutputStream的对象os = socket.getOutputStream();//3.具体的输出过程os.write("我是客户端,请多多关照!".getBytes());} catch (IOException e) {e.printStackTrace();}finally {//4.关闭相应的流与Socketif(os != null) {try {os.close();} catch (IOException e) {e.printStackTrace();}}if(socket != null) {try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}@Test//服务端public void server() {ServerSocket ss = null;Socket s = null;InputStream is = null;try {//1.创建ServerSocket的对象,通过构造器指明自身的接收端口ss = new ServerSocket(9090);//2.调用accept()方法,返回Socket的对象()s = ss.accept();//3.调用Socket的getInputStream(): 接收从客户端发送过来的数据输入流is = s.getInputStream();//4.对获取的输入流进行操作byte[] b = new byte[20];int len;while((len = is.read(b)) != -1) {String str = new String(b,0,len);System.out.print(str);}System.out.println("收到来自" + s.getInetAddress().getHostName() + "的消息");} catch (IOException e) {e.printStackTrace();}finally {//5.关闭相应的流与Socketif(is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}if(s != null) {try {s.close();} catch (IOException e) {e.printStackTrace();}}if(ss != null) {try {ss.close();} catch (IOException e) {e.printStackTrace();}}}}
}

例2

package com.end.java;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;import org.junit.Test;//客户端给服务器发送信息,服务端输送此信息到控制台,同向客户端发送“收到信息”
public class TestTCP2 {@Test//客户端public void client() {Socket socket = null;OutputStream os = null;InputStream is = null;try {socket = new Socket(InetAddress.getByName("127.0.0.1"),8081);os = socket.getOutputStream();os.write("我是客户端".getBytes());//shutdownOutput():告诉服务端消息已发送完毕socket.shutdownOutput();is = socket.getInputStream();byte[] b = new byte[20];int len;while((len = is.read(b)) != -1) {String str = new String(b,0,len);System.out.print(str);}} catch (Exception e) {e.printStackTrace();}finally {if(is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}if(os != null) {try {os.close();} catch (IOException e) {e.printStackTrace();}}if(socket != null) {try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}@Test//服务端public void server() {ServerSocket ss = null;Socket s = null;InputStream is = null;OutputStream os = null;try {ss = new ServerSocket(8081);s = ss.accept();is = s.getInputStream();byte[] b = new byte[20];int len;while((len = is.read(b)) != -1) {String str = new String(b,0,len);System.out.print(str);}os = s.getOutputStream();os.write("我已收到".getBytes());} catch (IOException e) {e.printStackTrace();}finally {if(os != null) {try {os.close();} catch (Exception e) {e.printStackTrace();}}if(is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}if(s != null) {try {s.close();} catch (IOException e) {e.printStackTrace();}}if(ss != null) {try {ss.close();} catch (IOException e) {e.printStackTrace();}}}}
}

例3

package com.end.java; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;import org.junit.Test;//从客户端发送给服务器,服务端保存到本地,并返回“发送成功”给客户端,并关闭相应的连接
//处理异常时,必须使用try-catch-finally!本例仅为书写方便
public class TestTCP3 {@Testpublic void client() throws Exception{//客户端//1.创建对象Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9898);//2.本地获取文件发送给服务端OutputStream os = socket.getOutputStream();FileInputStream fis = new FileInputStream(new File("1.webp"));byte[] b = new byte[20];int len;while((len = fis.read(b)) != -1) {os.write(b,0,len);}socket.shutdownOutput();//3.读取服务端发送的数据InputStream is = socket.getInputStream();byte[] b1 = new byte[1024];int len1;while((len1 = is.read(b1)) != -1) {String str = new String(b1,0,len1);System.out.print(str);}//4.关闭相应的流os.close();is.close();fis.close();socket.close();}@Test//服务器public void server() throws Exception{//1.创建对象ServerSocket ss = new ServerSocket(9898);//2.接受/读取客户端请求或数据,保存到本地Socket s = ss.accept();InputStream is = s.getInputStream();FileOutputStream fos = new FileOutputStream(new File("2.webp"));byte[] b = new byte[1024];int len;while((len = is.read(b)) != -1) {fos.write(b,0,len);}System.out.println("收到来自" + s.getInetAddress().getHostName() + "的文件");//3.向客户端发送信息OutputStream os = s.getOutputStream();os.write("你发送的图片已接收成功".getBytes());//4.关闭相应的流os.close();is.close();fos.close();ss.close();s.close();}
}

5.UDP网络通信

用户数据报协议要点
  • 将数据,源,目的地址封装成数据包,不需要建立连接
  • 每个数据报的大小限制在64K
  • 因无需连接,故不可靠
  • 发送数据结束时无需释放资源,速度快
package com.end.java;  import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;import org.junit.Test;//发送端给服务器发送信息,服务端输送此信息到控制台
//DatagramSocket(数据报的发送和接收) 和 DatagramPacket(对象封装UDP数据报中数据)实现基于UDP协议网络程序
public class TestUDP {@Test//发送端public void send() {DatagramSocket ds= null;try {ds = new DatagramSocket();byte[] b = "hello,world!".getBytes();//创建数据报,每个数据报不能大于64K,都记录着数据,发送端IP,端口,及接收端IP,端口DatagramPacket pack = new DatagramPacket(b,0,b.length,InetAddress.getByName("127.0.0.1"),9090);ds.send(pack);} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if(ds != null) {ds.close();}}}@Test//接收端public void rceive() {DatagramSocket ds = null;try {ds = new DatagramSocket(9090);byte[] b = new byte[1024];DatagramPacket pack = new DatagramPacket(b,0,b.length);ds.receive(pack);String str = new String(pack.getData(),0,pack.getLength());System.out.println(str);} catch (IOException e) {e.printStackTrace();}finally {if(ds != null) {ds.close();}}}
}
练习
package com.end.java;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;import org.junit.Test;//TCP编程练习:客户端给服务端发送文本,服务端将文本转成大写返回给客户端
public class TCPTest {@Testpublic void client() {Socket socket = null;OutputStream os = null;Scanner scanner = null;//4.接收来自服务端的数据InputStream is = null;try {socket = new Socket(InetAddress.getByName("127.0.0.1"),9090);os = socket.getOutputStream();System.out.println("请输入多个字符: ");scanner = new Scanner(System.in);String str = scanner.next();os.write(str.getBytes());socket.shutdownOutput();is = socket.getInputStream();byte[] b = new byte[1024];int len;while((len = is.read(b)) != -1) {String str1 = new String(b,0,len);System.out.println(str1);}} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {//5.关闭流if(is != null) {try {is.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(scanner != null) {scanner.close();}if(os != null) {try {os.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(socket != null) {try {socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}@Testpublic void server() {ServerSocket ss = null;Socket s = null;InputStream is = null;OutputStream os = null;try {ss = new ServerSocket(9090);s = ss.accept();//3.接收客户端信息is = s.getInputStream();byte[] b = new byte[10];int len;String str = new String();while((len = is.read(b)) != -1) {String str1 = new String(b,0,len);str += str1;}String strUpperCase = str.toUpperCase();//返回客户端信息os = s.getOutputStream();os.write(strUpperCase.getBytes());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {//关闭流if(os != null) {try {os.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(is != null) {try {is.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(s != null) {try {s.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(ss != null) {try {ss.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}

6.URL编程

  • 统一资源定位符,一个URL的对象,就对应着互联网上的一个资源
  • 可以通过URL的对象调用相应的方法,将此资源读取(“下载”)
  • 组成:<传输协议>://<主机号>:<端口号>/<文件名> 如:http://127.0.0.1:8080/index.html
    在这里插入图片描述

openStream()是将服务端的资源读取进来,如果希望输出数据,那就需要使用URLConnection
当需要与URL建立连接时,首先需要对象URL通过调用openConnection()生成的URLConnection对象,连接失败,将产生IOException异常

package com.end.java;      import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;//URL编程
public class TestURL {public static void main(String[] args) throws Exception {//1.创建URL对象URL url = new URL("http://127.0.0.1:8080//examples/index.html?about");//		//获取URL的协议名
//		System.out.println("协议名:" + url.getProtocol());
//		//获取URL的主机名
//		System.out.println("主机名:" + url.getHost());
//		//获取URL的端口号
//		System.out.println("端口号:" + url.getPort());
//		//获取URL的文件路径
//		System.out.println("文件路径:" + url.getPath());
//		//获取URL的文件名
//		System.out.println("文件名:" + url.getFile());
//		//获取URL的相对路径
//		System.out.println("文件相对路径:" + url.getRef());
//		//获取URL的查询名
//		System.out.println("查询名:" + url.getQuery());//将服务端的资源读取进来InputStream is = url.openStream();byte[] b = new byte[20];int len;while((len = is.read(b)) != -1) {String str = new String(b,0,len);System.out.println(str);}is.close();//既有数据的输入,又有数据的输出,考虑使用URLConnectionURLConnection urlConn = url.openConnection();InputStream is1 = urlConn.getInputStream();FileOutputStream fos = new FileOutputStream(new File("abc.txt"));byte[] b1 = new byte[20];int len1;while((len1 = is1.read(b1)) != -1) {fos.write(b1,0,len1);}fos.close();is.close();}
}

感谢大家的支持,关注,评论,点赞!
参考资料:
尚硅谷宋红康20天搞定Java基础下部

相关文章:

Java-day18(网络编程)

网络编程 1.概述 Java提供跨平台的网络类库&#xff0c;可以实现无痛的网络连接&#xff0c;程序员面对的是一个统一的网络编程环境 网络编程的目的&#xff1a;直接或间接地通过网络协议与其他计算机进行通信 网络编程的两个主要问题&#xff1a; 1.如何准确定位网络上一台…...

Java多线程编程-栅栏CyclicBarrier实例

前言 本文是基于《Java多线程编程实战指南-核心篇》第五章个人理解&#xff0c;源码是摘抄作者的源码&#xff0c;源码会加上自己的理解。读书笔记目前笔者正在更新如下&#xff0c; 《Java多线程编程实战指南-核心篇》&#xff0c;《How Tomcat Works》&#xff0c;再到《spr…...

【100天精通Python】Day67:Python可视化_Matplotlib 绘制动画,2D、3D 动画 示例+代码

1 绘制2D动画&#xff08;animation&#xff09; Matplotlib是一个Python绘图库&#xff0c;它提供了丰富的绘图功能&#xff0c;包括绘制动画。要绘制动画&#xff0c;Matplotlib提供了FuncAnimation类&#xff0c;允许您创建基于函数的动画。下面是一个详细的Matplotlib动画示…...

变量、常量以及与其他语言的差异 - Go语言从入门到实战

知识点 源码文件以_test结尾&#xff1a;xxx_test.go测试方法名以Test开头&#xff1a;func TestXXX(t *testing.T){…} 利用单元测试来写代码段&#xff0c;保存之后会自动运行程序返回结果&#xff0c;可以快速实践得到反馈。 编写测试程序 接下来练习一下&#xff0c;怎…...

Android 编译插桩操纵字节码

本文讲解如何编译插桩操纵字节码。 就使用 ASM 来实现简单的编译插桩效果&#xff0c;通过插桩实现在每一个 Activity 打开时输出相应的 log 日志。实现思路 过程主要包含两步&#xff1a; 1、遍历项目中所有的 .class 文件​ 如何找到项目中编译生成的所有 .class 文件&#…...

云原生的简单理解

一、何谓云原生&#xff1f; 一种构建和运行应用软件的方法 应用程序从设计之初即考虑到云的环境&#xff0c;原生为云而设计&#xff0c;在云上以最佳姿势运行&#xff0c;充分利用和发挥云平台的弹性分布式优势。 二、包括以下四个要素 采用容器化部署&#xff1a;实现云平…...

AVL Cruise 2020.1 安装教程

文章目录 安装包安装破解 安装包 链接&#xff1a;https://pan.baidu.com/s/1GxbeDj_SyvKFyPeTsstvTQ?pwd6666 提取码&#xff1a;6666 安装 安装文件&#xff1a; 双击setup.exe&#xff1a; 一直netx&#xff0c;中间要修改两次路径&#xff0c;第一次是安装位置&#xf…...

数组07-滑动窗口、HashMap

LeetCode——904. 水果成篮 你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示&#xff0c;其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而&#xff0c;农场的主人设定了一些严格的规矩&#xff0c…...

【C++杂货店】类和对象(上)

【C杂货店】类和对象&#xff08;上&#xff09; 一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1 访问限定符4.2 封装 五、类的作用域六、类的实例化七、类对象模型7.1 类对象的存储规则7.2 例题7.3结构体内存对齐规则 八、this指针8.2 t…...

K8S笔记

...

MySQL关于日期函数的使用-笔记

韩老师笔记 select current_time select CURRENT_DATE create table mes ( id int, content VARCHAR(255), send_time DATETIME ) select * from mes; insert into mes values(1,北京,CURRENT_DATE) insert into mes (id,send_time) values(2,CURRENT_TIME) insert into mes v…...

【postgresql 】 ERROR: “name“ is not supported as an alias

org.postgresql.util.PSQLException: ERROR: "name" is not supported as an alias 错误&#xff1a;不支持将“name”作为别名 SELECT real_name name FROM doc_user 加上 在关键词上加上 “” 示例&#xff1a; SELECT real_name "name" FROM do…...

都用HTTPS了,还能被查出浏览记录?

最近&#xff0c;群里一个刚入职的小伙因为用公司电脑访问奇怪的网站&#xff0c;被约谈了。他很困惑 —— 访问的都是HTTPS的网站&#xff0c;公司咋知道他访问了啥&#xff1f; 实际上&#xff0c;由于网络通信有很多层&#xff0c;即使加密通信&#xff0c;仍有很多途径暴露…...

vi配置文件.vimrc内容示例

1、.vimrc配置文件介绍 &#xff08;1&#xff09;.vimrc是vi编辑器的配置文件&#xff0c;里面可以对vi编译器做个性化配置&#xff1b; &#xff08;2&#xff09;.vimrc在用户目录下&#xff0c;每个用户有一个&#xff0c;类似于.bashrc文件&#xff0c;将下面的配置文件内…...

MacOS上的Pip和Python升级指南

在MacOS系统上&#xff0c;保持Pip和Python版本的最新状态对于顺利进行Python开发至关重要。通过升级Pip和Python&#xff0c;你可以享受到最新的功能、修复的bug以及提升的开发效率。本文将为你提供在MacOS上升级Pip和Python的详细指南&#xff0c;助你打造更强大的开发环境。…...

VB6.0实现修改EXE程序的图标

当你给一家公司做技术支持的时候&#xff0c;需求各种各样的&#xff0c;其中今天遇到就是要修改某个程序的图标&#xff0c;代码实现如下。 // q1016058890 群 214016721 //注 意&#xff1a;这个方法貌似只对有些EXE文件有效&#xff0c;这不是万能的方法&#xff0c;此…...

Python 编程基础 | 第二章-基础语法 | 2.3、for 语句

一、for 语句 1、循环语句 for循环的语法格式如下&#xff1a; for iterating_var in sequence:statements(s)例如&#xff1a; for ch in "hello world":print(ch)fruits ["banana", "apple", "mango"] for fruit in fruits:print(…...

linux下解决tomcat错误问题

错误一&#xff1a; Linux下Tomcat启动报错&#xff1a;Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 原因&#xff1a;可能是Linux环境变了&#xff0c;需要在catalina.sh文件里指定JDK路径 解决方式&#xff1a; 在/bin/catalina.sh配置文件中加…...

PMP证书的价值如何?

2022年开始&#xff0c;PMP考试启用了新考纲&#xff0c;不光考试内容进行了大刀阔斧的改革&#xff0c;出题方式也进行了更新。除原有的PMBOK6和PMBOK7主考教材外&#xff0c;还增加了一本《敏捷实践指南》。 别小看新加的这本书&#xff0c;它虽然与PMBOK代表的预测法属于完…...

linux上mysql数据备份(全量备份策略+增量备份策略)

执行备份策略前&#xff0c;先做好scp命令的准备 解决思路&#xff1a; 生成SSH公钥/私钥后&#xff0c;您需要将公钥添加到服务器上&#xff0c;从而使服务器可以使用该公钥来验证您的身份。 生成SSH公钥/私钥的命令为 ssh-keygen -t rsa -b 4096什么都不用输入&#xff0c…...

PHP实现DFA算法,查找关键词

# 添加关键词 到全局字典dict里面 protected function addWord($strWord) {$len mb_strlen($strWord,UTF-8);$curNode &$this->dict;for ($index 0; $index < $len; $index) {$word mb_substr($strWord, $index, 1, UTF-8);if (!isset($curNode[$word])) {$curNo…...

JTS:08 JTS图形相交

这里写目录标题 版本JTS disjoint intersects俩个图形不相交俩个图形 边相交俩个图形 内部相交俩个图形 点相交 版本 org.locationtech.jts:jts-core:1.19.0 链接: github JTS disjoint intersects 不相交的 九交模型FF*FF**** 相交的 九交模型 [T********] [*T*******] [**…...

深挖 ThreadLocal 底层原理?它有什么用?学会之后手撕面试官

目录 1. ThreadLocal 的主要功能&#xff1f; 2. ThreadLocal 代码举例 3. ThreadLocal 源码分析 3.1 ThreadLocal 的 get 方法源码解析 3.2 ThreadLocal 的 set 方法源码解析 3.3 ThreadLocal 的 createMap 方法源码解析 3.4 ThreadLocal 的 set 方法总结 4. 为什么En…...

sort()排序函数(c++)

文章目录 sort()排序函数&#xff08;c&#xff09;一、原理二、使用方法&#xff08;一&#xff09;头文件&#xff08;二&#xff09;使用语法1.方式一&#xff08;默认&#xff09;2.方式二&#xff1a;定义升序或降序3.方式三&#xff1a;自定义 sort()排序函数&#xff08…...

如何评估测试用例的优先级?

评估测试用例的优先级&#xff0c;有助于我们及早发现和解决可能对系统稳定性和功能完整性产生重大影响的问题&#xff0c;助于提高测试质量&#xff0c;提高用户满意度。 如果没有做好测试用例的优先级评估&#xff0c;往往容易造成对系统关键功能和高风险场景测试的忽略&…...

510758-28-8,用于标记蛋白质和酶的配体TBTA

产品简介&#xff1a;Tris(benzyltriazolylmethyl)amine (TBTA)是一种配体&#xff0c;能作为生化工具用于标记蛋白质和酶。 CAS号&#xff1a;510758-28-8 中文名&#xff1a;三[(1-苄基-1H-1,2,3-三唑-4-基)甲基]胺 英文名&#xff1a;TBTA 化学式&#xff1a;C30H30N10…...

Jtti:云服务器ftp不能访问端口如何解决

如果您的云服务器上的FTP服务无法访问端口&#xff0c;可能有多种原因导致这种情况。以下是一些可能的解决方法&#xff1a; 检查FTP服务状态&#xff1a; 首先&#xff0c;请确保您的FTP服务器正在运行。您可以使用以下命令来检查FTP服务器的状态&#xff0c;具体命令可能因FT…...

云服务器租用价格表概览_阿里云腾讯云华为云

云服务器租用价格多少钱一年&#xff1f;阿腾云分享阿里云、腾讯云和华为云的云服务器租用价格表&#xff1a;阿里云2核2G服务器108元一年起、腾讯云2核2G3M带宽轻量服务器95元一年、华为云2核2G3M云耀L实例89元一年起&#xff0c;阿腾云分享更多关于云服务器租用价格明细&…...

E. Iva Pav -前缀和 + 二分 +位运算

题面 分析&#xff1a; 赛时一直纠结于与运算前缀和不可逆&#xff0c;导致没有思路&#xff0c;但是发现行不通并没有及时思考别的解决办法导致一条路走到黑&#xff0c;阻碍了自己的思维&#xff0c;在今年的网络赛赛时也是一样&#xff0c;行不通的时候就没心思去重新想其…...

新手学习:ArcGIS对shp文件裁剪

新手学习&#xff1a;ArcGIS对SHP文件裁剪 新手学习 记录每个步骤&#xff0c;因为有很多控件可能刚开始还不熟悉&#xff0c;根本不知道在哪里&#xff0c;所以写的比较详细。 1.添加要裁剪的shp文件 2.查看shp文件的地理坐标系 双击shp文件&#xff0c;就可以查看shp文件的…...