TCP与UDP网络编程
网络通信协议
java.net
包中提供了两种常见的网络协议的支持:
- UDP:用户数据报协议(User Datagram Protocol)
- TCP:传输控制协议(Transmission Control Protocol)
TCP协议与UDP协议
TCP协议
- TCP协议进行通信的两个应用进程:客户端、服务端
- 使用TCP协议前,须先建立TCP连接,形成基于字节流的传输数据通道
- 传输前,采用“三次握手”方式,点对点通信,是可靠的
- TCP协议使用重发机制,当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体确认信息,如果没有收到另一个通信实体确认信息,则会再次重复刚才发送的消息
- 在连接中可进行大数据量的传输
传输完毕,需释放已建立的连接,效率低
UDP协议
- UDP协议进行通信的两个应用进程:发送端、接收端
- 将数据、源、目的封装成数据包(传输的基本单位),不需要建立连接
- 发送不管对方是否准备好,接收方收到也不确认,不能保证数据的完整性,故是不可靠的
- 每个数据报的大小限制在64K内
- 发送数据结束时无需释放资源,开销小,通信效率高
- 适用场景:音频、视频和普通数据的传输。例如视频会议
生活案例
TCP生活案例:打电话
UDP生活案例:发送短信、发电报
区别
- TCP:可靠的连接(发送数据前,需要三次握手、四次挥手),进行大数据量的传输,效率低。
- UDP:不可靠的连接(发送前,不需要确认对方是否在)、使用数据报传输(限制在64kb以内)、效率高。
TCP协议
三次握手
TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。
完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛,例如下载文件、浏览网页等。
四次挥手
TCP协议中,在发送数据结束后,释放连接时需要经过四次挥手。
- 第一次挥手:客户端向服务器端提出结束连接,
让服务器做最后的准备工作
。此时,客户端处于半关闭状态,即表示不再向服务器发送数据了,但是还可以接受数据。 - 第二次挥手:服务器接收到客户端释放连接的请求后,
会将最后的数据发给客户端
。并告知上层的应用进程不再接收数据。 - 第三次挥手:服务器发送完数据后,会给客户端
发送一个释放连接的报文
。那么客户端接收后就知道可以正式释放连接了。 - 第四次挥手:客户端接收到服务器最后的释放连接报文后,要
回复一个彻底断开的报文
。这样服务器收到后才会彻底释放连接。这里客户端,发送完最后的报文后,会等待2MSL,因为有可能服务器没有收到最后的报文,那么服务器迟迟没收到,就会再次给客户端发送释放连接的报文,此时客户端在等待时间范围内接收到,会重新发送最后的报文,并重新计时。如果等待2MSL后,没有收到,那么彻底断开。
网络编程API
Socket类
基本介绍
示意图:
理解客户端、服务端
-
客户端:
- 自定义
- 浏览器(browser — server)
-
服务端:
- 自定义
- Tomcat服务器
TCP网络编程
通信模型
例题1
客户端发送内容给服务端,服务端将内容打印到控制台上。
public class TCPTest1 {//客户端@Testpublic void client() {Socket socket = null;OutputStream os = null;try {// 1.创建一个SocketInetAddress inetAddress = InetAddress.getByName("127.0.0.1"); //声明ip地址int port = 8989; //声明端口号socket = new Socket(inetAddress,port);// 2.发送数据os = socket.getOutputStream();os.write("你好,我是客户端,请多多关照".getBytes());} catch (IOException e) {e.printStackTrace();} finally {// 3.关闭socket、流try {if (socket != null)socket.close();} catch (IOException e) {e.printStackTrace();}try {if (os != null)os.close();} catch (IOException e) {e.printStackTrace();}}}//服务端@Testpublic void server() {ServerSocket serverSocket = null;Socket socket = null; //阻塞式方法InputStream is = null;try {// 1.创建一个ServerSocketint port = 8989;serverSocket = new ServerSocket(port);// 2.调用accept(),接收客户端的Socketsocket = serverSocket.accept();System.out.println("服务器端已开启");System.out.println("收到了来自于" + socket.getInetAddress().getHostAddress() + "的连接");// 3.接收数据is = socket.getInputStream();byte[] buffer = new byte[1024];ByteArrayOutputStream baos = new ByteArrayOutputStream(); //内部维护了一个byte[]int len;while ((len = is.read(buffer)) != -1) {// 错误的,可能会出现乱码
// String str = new String(buffer,0,len);
// System.out.println(str);//正确的baos.write(buffer,0,len);}System.out.println(baos.toString());System.out.println("\n数据接收完毕");} catch (IOException e) {e.printStackTrace();} finally {// 4.关朗Socket、ServerSocket、流try {if (socket != null) {socket.close();}} catch (IOException e) {e.printStackTrace();}try {if (serverSocket != null) {serverSocket.close();}} catch (IOException e) {e.printStackTrace();}try {if (is != null) {is.close();}} catch (IOException e) {e.printStackTrace();}}}
}
例题2
客户端发送文件给服务端,服务端将文件保存在本地。
public class TCPTest2 {//客户端@Testpublic void client() {// 1.创建Socket// 指明对方(即为服务器)的ip地址和端口号Socket socket = null;FileInputStream fis = null;OutputStream os = null;try {InetAddress inetAddress = InetAddress.getByName("127.0.0.1");int port = 9090;socket = new Socket(inetAddress,port);// 2.创建File的实例、FileInputstream的实例File file = new File("huan.jpg");fis = new FileInputStream(file);// 3.通过Socket,获取输出流os = socket.getOutputStream();// 读写数据byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) != -1) {os.write(buffer,0,len);}System.out.println("数据发送完毕");} catch (IOException e) {e.printStackTrace();} finally {// 4.关闭Socket和相关的流try {if (os != null) {os.close();}} catch (IOException e) {e.printStackTrace();}try {if (fis != null) {fis.close();}} catch (IOException e) {e.printStackTrace();}try {if (socket != null) {socket.close();}} catch (IOException e) {e.printStackTrace();}}}//服务端@Testpublic void server() {ServerSocket serverSocket = null;Socket socket = null;InputStream is = null;FileOutputStream fos = null;try {// 1.创建ServerSocketint port = 9090;serverSocket = new ServerSocket(port);// 2.接收来自于客户端的socket:accept()socket = serverSocket.accept();// 3.通过Socket获取一个输入流is = socket.getInputStream();// 4.创建File类的实例、File0utputstream的实例File file = new File("huan_copy.jpg");fos = new FileOutputStream(file);// 5.读写过程byte[] buffer = new byte[1024];int len;while ((len = is.read(buffer)) != -1) {fos.write(buffer,0,len);}System.out.println("数据接收完毕");} catch (IOException e) {e.printStackTrace();} finally {// 6.关闭相关的Socket和流try {if (fos != null) {fos.close();}} catch (IOException e) {e.printStackTrace();}try {if (is != null) {is.close();}} catch (IOException e) {e.printStackTrace();}try {if (socket != null) {socket.close();}} catch (IOException e) {e.printStackTrace();}try {if (serverSocket != null) {serverSocket.close();}} catch (IOException e) {e.printStackTrace();}try {if (is != null) {is.close();}} catch (IOException e) {e.printStackTrace();}}}
}
例题3
从客户端发送文件给服务端,服务端保存到本地。并返回“发送成功"给客户端。并关闭相应的连接。
public class TCPTest3 {//客户端@Testpublic void client() {// 1.创建Socket// 指明对方(即为服务器)的ip地址和端口号Socket socket = null;FileInputStream fis = null;OutputStream os = null;ByteArrayOutputStream baos = null;InputStream is = null;try {InetAddress inetAddress = InetAddress.getByName("127.0.0.1");int port = 9090;socket = new Socket(inetAddress, port);// 2.创建File的实例、FileInputstream的实例File file = new File("huan.jpg");fis = new FileInputStream(file);// 3.通过Socket,获取输出流os = socket.getOutputStream();// 4.读写数据byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) != -1) {os.write(buffer, 0, len);}System.out.println("数据发送完毕");// 5.客户端表明不再继续发送数据socket.shutdownOutput();// 6.接收来自于服务器端的数据is = socket.getInputStream();baos = new ByteArrayOutputStream();byte[] buffer1 = new byte[5];int len1;while ((len1 = is.read(buffer1)) != -1) {baos.write(buffer1, 0, len1);}System.out.println(baos.toString());} catch (IOException e) {e.printStackTrace();} finally {// 7.关闭Socket和相关的流try {baos.close();} catch (Exception e) {e.printStackTrace();}try {is.close();} catch (IOException e) {e.printStackTrace();}try {if (os != null) {os.close();}} catch (IOException e) {e.printStackTrace();}try {if (fis != null) {fis.close();}} catch (IOException e) {e.printStackTrace();}try {if (socket != null) {socket.close();}} catch (IOException e) {e.printStackTrace();}}}//服务端@Testpublic void server() {ServerSocket serverSocket = null;Socket socket = null;InputStream is = null;FileOutputStream fos = null;OutputStream os = null;try {// 1.创建ServerSocketint port = 9090;serverSocket = new ServerSocket(port);// 2.接收来自于客户端的socket:accept()socket = serverSocket.accept();// 3.通过Socket获取一个输入流is = socket.getInputStream();// 4.创建File类的实例、File0utputstream的实例File file = new File("huan_copy2.jpg");fos = new FileOutputStream(file);// 5.读写过程byte[] buffer = new byte[1024];int len;while ((len = is.read(buffer)) != -1) {fos.write(buffer, 0, len);}// 6.服务端发送数据给客户端os = socket.getOutputStream();os.write("你的图片很漂亮,我接收到了".getBytes());System.out.println("数据接收完毕");} catch (IOException e) {e.printStackTrace();} finally {// 7.关闭相关的Socket和流try {os.close();} catch (IOException e) {e.printStackTrace();}try {if (fos != null) {fos.close();}} catch (IOException e) {e.printStackTrace();}try {if (is != null) {is.close();}} catch (IOException e) {e.printStackTrace();}try {if (socket != null) {socket.close();}} catch (IOException e) {e.printStackTrace();}try {if (serverSocket != null) {serverSocket.close();}} catch (IOException e) {e.printStackTrace();}try {if (is != null) {is.close();}} catch (IOException e) {e.printStackTrace();}}}
}
【案例】聊天室
聊天室模型
服务器端
public class ChatSeverTest {//这个集合用来存储所有在线的客户端static ArrayList<Socket> online = new ArrayList<Socket>();public static void main(String[] args) throws IOException {//1、启动服务器,绑定端口号ServerSocket server = new ServerSocket(8989);//2、接收n多的客户端同时连接while (true) {Socket accept = server.accept();online.add(accept);//把新连接的客户端添加到online列表中MessageHandler mh = new MessageHandler(accept);mh.start();}}static class MessageHandler extends Thread {private Socket socket;private String ip;public MessageHandler(Socket socket) {super();this.socket = socket;}@Overridepublic void run() {try {ip = socket.getInetAddress().getHostAddress();//插入:给其他客户端转发“我上线了”sendToOther(ip+"上线了");//(1)接收该客户端的发送的消息InputStream input = socket.getInputStream();InputStreamReader reader = new InputStreamReader(input);BufferedReader br = new BufferedReader(reader);String str;while ((str = br.readLine()) != null) {//(2)给其他在线客户端转发sendToOther(ip + ":" + str);}sendToOther(ip + "下线了");} catch (IOException e) {try {sendToOther(ip + "掉线了");} catch (Exception e1) {e1.printStackTrace();}} finally {//从在线人员中移除我online.remove(socket);}}//封装一个方法:给其他客户端转发xxx消息public void sendToOther(String message) throws IOException {//遍历所有的在线客户端,一一转发for (Socket on : online) {OutputStream every = on.getOutputStream();PrintStream ps = new PrintStream(every);ps.println(message);}}}
}
客户端
public class ChatClientTest {public static void main(String[] args) throws Exception {//1、连接服务器Socket socket = new Socket("127.0.0.1", 8989);//2、开启两个线程//(1)一个线程负责看别人聊,即接收服务器转发的消息Receive receive = new Receive(socket);receive.start();//(2)一个线程负责发送自己的话Send send = new Send(socket);send.start();send.join();//等我发送线程结束了,才结束整个程序socket.close();}
}class Send extends Thread{private Socket socket;public Send(Socket socket) {super();this.socket = socket;}@Overridepublic void run() {try {OutputStream outputStream = socket.getOutputStream();//按行打印PrintStream ps = new PrintStream(outputStream);Scanner input = new Scanner(System.in);//从键盘不断的输入自己的话,给服务器发送,由服务器给其他人转发while (true) {System.out.println("自己的话:");String str = input.nextLine();if ("bye".equals(str)) {break;}ps.println(str);}input.close();} catch (IOException e) {e.printStackTrace();}}
}class Receive extends Thread{private Socket socket;public Receive(Socket socket) {super();this.socket = socket;}@Overridepublic void run() {try {InputStream inputStream = socket.getInputStream();Scanner input = new Scanner(inputStream);while (input.hasNextLine()) {String line = input.nextLine();System.out.println(line);}} catch (IOException e) {e.printStackTrace();}}
}
UDP网络编程
通信模型
示例
public class UDPTest {//发送端@Testpublic void sender() throws Exception {//1.创建DatagramSocket的实例DatagramSocket ds = new DatagramSocket();//2、将数据、目的地的ip,目的地的端口号部封装在DatagramPacket数据报中InetAddress inetAddress = InetAddress.getByName("127.0.0.1");int port = 9090;byte[] bytes = "我是发送端".getBytes("utf-8");DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length, inetAddress, port);//发送数据ds.send(packet);ds.close();}//接收端@Testpublic void receiver() throws IOException {//1.创建DatagramSocket的实例int port = 9090;DatagramSocket ds = new DatagramSocket(port);//2. 创建数据报的对象,用于接收发送端发送过来的数据byte[] buffer = new byte[1024 * 64];DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);//3.接收数据ds.receive(packet);//4.获取数据,并打印到控制台上String str = new String(packet.getData(), 0, packet.getLength());System.out.println(str);ds.close();}
}
相关文章:
TCP与UDP网络编程
网络通信协议 java.net 包中提供了两种常见的网络协议的支持: UDP:用户数据报协议(User Datagram Protocol)TCP:传输控制协议(Transmission Control Protocol) TCP协议与UDP协议 TCP协议 TCP协议进行通信的两个应用进程:客户端、服务端 …...
媲美Midjourney-v6,Kolors最新文生图模型部署
Kolors模型是由快手团队开发的大型文本到图像生成模型,专门用于将文本描述转换成高质量的图像。 Kolors模型支持中英文双语输入,生成效果与Midjourney-v6相媲美,能够处理长达256个字符的文本输入,具备生成中英文文字的能力。 Ko…...
深度学习程序环境配置
深度学习环境配置 因为之前轻薄本没有显卡跑不起来,所以换了台电脑重新跑程序,故记录一下配置环境的步骤及常见错误 本人数学系,计算机部分知识比较匮乏,计算机专业同学可以略过部分内容 深度学习环境配置 深度学习环境配置 CUD…...
【STM32 HAL库】全双工I2S+双缓冲DMA的使用
1、配置I2S 我们的有效数据是32位的,使用飞利浦格式。 2、配置DMA **这里需要注意:**i2s的DR寄存器是16位的,如果需要发送32位的数据,是需要写两次DR寄存器的,所以DMA的外设数据宽度设置16位,而不是32位。…...
【Spring Boot】网页五子棋项目中遇到的困难及解决方法
目录 一、HikariPool-1 - Starting异常二、Invalid bound statement (not found)异常三、The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary异常四、The server time zone value时区报错异常五、补充知识点…...
营销策划方案模板
这应该是目前最详细最完整的营销策划方案模板,营销公司内部都在使用的标准版本,你可以根据自己的营销内容直接填入这个模板,很快就能写好一份至少80分的营销策划方案。 如果暂时用不到也可以先收藏,以备不时之需。 废话不多说&a…...
Python入门基础教程(非常详细)
现在找工作真的越来越难了!今年更是难上加难 前几天在网上刷到这样一条热搜: #23岁找工作因年龄大被HR拒绝了# 是这个世界疯了还是我疯了? 合着只想要有20年以上工作经验的应届毕业生是吧 这好像就是现在的就业市场现状:“35岁…...
LeetCode 常见题型汇总
前30 22 生成括号 剪枝 51 N皇后 37 解数独 二分查找 69 求平方根 字典树 位运算 191 求1的个数 231 2的N次方 338 求0到N的比特位为1的个数 动态规划 并查集 LRU缓存 布隆过滤器...
el-select选择器修改背景颜色
<!--* FilePath: topSearch.vue* Author: 是十九呐* Date: 2024-07-18 09:46:03* LastEditTime: 2024-07-18 10:42:03 --> <template><div class"topSearch-container"><div class"search-item"><div class"item-name&quo…...
Shell程序设计
各位看官,从今天开始,我们进入新的专栏Shell学习,Shell 是操作系统的命令行界面,它允许用户通过输入命令与操作系统交互。常见的 Shell 有 Bash 和 Zsh,它们可以执行用户输入的命令或运行脚本文件。Shell 广泛应用于系…...
PyQT6---环境搭建
1、虚拟环境搭建 创建虚拟环境 create -n pyqt6_39 python3.9 切换虚拟环境 conda activate pyqt6_39 2、安装pyqt6 安装pyqt6和pyqt6-tools pip install PyQt6 -i https://pypi.tuna.tsinghua.edu.cn/simplepip install pyqt6-tools -i https://pypi.tuna.tsinghua.edu.cn/…...
whisper-api语音识别语音翻译高性能兼容openai接口协议的开源项目
whisper-api 介绍 使用openai的开源项目winsper语音识别开源模型封装成openai chatgpt兼容接口 软件架构 使用uvicorn、fastapi、openai-whisper等开源库实现高性能接口 更多介绍 https://blog.csdn.net/weixin_40986713/article/details/138712293 使用说明 下载代码安装…...
面试题:Java中堆内存和栈内存的区别,缓存数据是把数据放到哪里
目录 堆内存(Heap)栈内存(Stack)String字符串的hashcode缓存 在Java中,堆内存(Heap)和栈内存(Stack)是两种不同类型的内存区域。它们各自扮演着不同的角色,并…...
【开源库学习】libodb库学习(一)
Hello World Example 在本章中,我们将使用传统的“Hello World”示例展示如何创建一个依赖于ODB进行对象持久化的简单C应用程序。特别是,我们将讨论如何声明持久类、生成数据库支持代码以及编译和运行我们的应用程序。我们还将学习如何使对象持久化&…...
Java中SPI机制原理解析
使用SPI机制前后的代码变化 加载MySQL对JDBC的Driver接口实现 在未使用SPI机制之前,使用JDBC操作数据库的时候,一般会写如下的代码:// 通过这行代码手动加载MySql对Driver接口的实现类 Class.forName("com.mysql.jdbc.Driver") Dr…...
数学建模~~~SPSS相关和回归分析
目录 1.双变量相关分析 1.1理论基础 1.2简单散点图的绘制介绍 1.3相关性分析 1.4分析相关性结果 2.简单线性回归分析 2.1简单概括 2.2分析过程 2.3结果分析 3.曲线回归分析 3.1问题介绍 3.2分析过程 3.3结果分析 1.双变量相关分析 1.1理论基础 双变量相关分析并不…...
【Android】常用基础布局
布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,从而编写出精美的界面,布局内不单单可以放控件,也可以嵌套布局,这样可以完成一些复杂的界面,下面就来认识一些常用的布局吧。…...
服务攻防-中间件安全(漏洞复现)
一.中间件-IIS-短文件&解析&蓝屏 IIS现在用的也少了,漏洞也基本没啥用 1、短文件:信息收集 2、文件解析:还有点用 3、HTTP.SYS:蓝屏崩溃 没有和权限挂钩 4、CVE-2017-7269 条件过老 windows 2003上面的漏洞 二.中…...
【SD】深入理解Stable Diffusion与ComfyUI的使用
【SD】深入理解Stable Diffusion与ComfyUI的使用 1. Stable Diffusion(SD)原理概述2. 各部件详解3. SD的工作流程4. ComfyUI与SD的结合5. 总结 1. Stable Diffusion(SD)原理概述 整体结构:SD不是单一模型,…...
Linux 12:多线程2
1. 生产者消费者模型 生产者消费者模型有三种关系,两个角色,一个交易场所。 三种关系: 生产者之间是什么关系?竞争 - 互斥 消费者和消费者之间?竞争 - 互斥 消费者和消费者之间?互斥和同步 两个角色: 生产者和消费者 一个交…...
Android RSA 加解密
文章目录 一、RSA简介二、RSA 原理介绍三、RSA 秘钥对生成1. 密钥对生成2. 获取公钥3. 获取私钥 四、PublicKey 和PrivateKey 的保存1. 获取公钥十六进制字符串1. 获取私钥十六进制字符串 五、PublicKey 和 PrivateKey 加载1. 加载公钥2. 加载私钥 六、 RSA加解密1. RSA 支持三…...
类与对象-多态-案例3-电脑组装具体实现
#include<iostream> #include<string> using namespace std; //CPU class CPU { public:virtual void calculate() 0; }; //显卡 class GraCard { public:virtual void graphics() 0; }; //存储 class Memory { public:virtual void memory() 0; }; class Compu…...
try-with-resources 语句的用途和优点有哪些,它如何自动管理资源?
在Java编程中,资源管理是一个重要的议题,尤其是当你在代码中使用那些需要显式关闭的资源,比如文件流、数据库连接或者网络套接字等。 如果资源使用完毕后忘记关闭,不仅会导致资源泄露,还可能引起程序性能问题甚至系统…...
GraphRAG参数与使用步骤 | 基于GPT-4o-mini实现更便宜的知识图谱RAG
首先给兄弟朋友们展示一下结论,一个文本18万多字,txt文本大小185K,采用GraphRAG,GPT-4o-mini模型,索引耗时差不多5分钟,消耗API价格0.15美元 GraphRAG介绍 GraphRAG是微软最近开源的一款基于知识图谱技术的框架&#…...
/秋招突击——7/21——复习{堆——数组中的第K大元素}——新作{回溯——全排列、子集、电话号码的字母组合、组合总和、括号生成}
文章目录 引言复习数组中的第K大的最大元素复习实现参考实现 新作回溯模板46 全排列个人实现参考实现 子集个人实现参考实现 电话号码的字母组合复习实现 组合总和个人实现参考实现 括号生成复习实现 总结 引言 昨天的科大讯飞笔试做的稀烂,今天回来好好练习一下&a…...
matlab 异常值检测与处理——Robust Z-score法
目录 一、算法原理1、概述2、主要函数3、参考文献二、代码实现三、结果展示四、相关链接本文由CSDN点云侠翻译,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、概述 Robust Z-score法也被称为中位数绝对偏差法。它类似于Z-sc…...
Ubuntu 20安装JDK17和MySQL8.0
一.jdk 安装JDK 第一步:更新软件包:sudo apt update 第二步:安装JDK:sudo apt install openjdk-17-jdk 第三步:检测JDK: java -version 卸载JDK: 第一步:移除JDK包:apt-get purg…...
DC-1靶场打靶第一次!!!!冲冲冲!
今天打了一下DC-1这个靶场,感觉收获比大,我就来记录一下。 我的思路是下面的这个 我们先把靶机导入,然后与我们的liunx(攻击机)在同一个网段中,这也大大的减低难度。 然后我们先对自己这个网段内存活的主机进行操作,我…...
【LeetCode】填充每个节点的下一个右侧节点指针 II
目录 一、题目二、解法完整代码 一、题目 给定一个二叉树: struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NUL…...
mac无法清空废纸篓怎么办 mac废纸篓清空了如何找回 cleanmymac误删文件怎么恢复
废纸篓相当于“一颗后悔药”,用于临时存储用户删除的文件。我们从从Mac上删除的文件,一般会进入废纸篓中。如果我们后悔了,可以从废纸篓中找回来。然而,有时我们会发现mac无法清空废纸篓,这是怎么回事?本文将探讨一些…...
武汉市官方网站/推广引流渠道有哪些
http://www.cnblogs.com/mecity/archive/2011/06/11/2078527.html http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/转载于:https://www.cnblogs.com/faxian/p/4352816.html...
河口企业网站开发公司/百度网盘官方下载
python怎么打开文件模式python的open打开的是哪里的文件啊python 读取文件,怎么打开?.py文件无法用python打开我系统里装有python 2.7,在双击.py文件时为什么弹应该是没有设置环境变量的缘故: 右击【我的电脑】【属性】-【高级】-【环境变量】…...
珠海做企业网站/太原网站制作推广
随着时代的发展,我们对工具软件的依赖性越来越强,工具软件可以帮助我们更好地工作和生活。就拿便签软件来说吧,是我们工作中不可或缺的桌面工具,只要我们需要记录的时候,打开便签就可以记录到对应的分类下。 便签软件…...
wordpress获取文章内容过滤空格/网站seo技术教程
转 http://www.programbbs.com/doc/175.htm 首先申明:我是菜鸟,我只不过想把困绕了我很长时间的问题的解决方案发表出来,免得以后我又忘记,同时给还不知道这些小知识的同僚一些帮助。各位不要笑我的浅薄。同时为了表示我的低级,我会很罗嗦的讲一些基本的…...
做网站有前途/网站优化seo教程
环境准备:操作系统:RedHat 6.7数据库:Mysql 5.7.181.从官网下载 mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz官网地址:http://dev.mysql.com/downloads/mysql/2. 创建mysql的用户组/用户, data目录及其用户目录mkdir /home/mysql…...
从化专业做网站/品牌营销推广策划方案
转载地址:http://cnodejs.org/topic/58f376fec749f63d48fe9548 今天就要给大家安利一下在VScode上进行断点调试的方法。 VScode除了out-of-box支持JavaScript和TypeScript,还支持Node.js调试,简直就是为前端工程师而生的,对不对……...