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

Linux系统编程——网络编程的学习

Linux系统编程学习相关博文

  1. Linux系统编程——文件编程的学习
  2. Linux系统编程——进程的学习
  3. Linux系统编程——进程间通信的学习
  4. Linux系统编程——线程的学习

Linux系统编程——网络编程的学习

  • 一、概述
    • 1. TCP/UDP
    • 2. 端口号
    • 3. 字节序
    • 4. Sockt服务器和客户端的开发步骤
      • 1. 服务器
      • 2. 客户端
  • 二、网络编程API
  • 三、API介绍
    • 1. socket函数
    • 2. bind函数
    • 3. listen函数
    • 4. accept函数
    • 5. connect函数
    • 6. inet_aton函数
    • 7. inet_ntoa函数
    • 8. htons函数
  • 四、API的使用例子

一、概述

1. TCP/UDP

  1. TCP面向连接( 如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
  2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
  3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低 (对实时应用很有用,如IP电话,实时视频会议等)
  4. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
  5. TCP首部开销20字节;UDP的首部开销小,只有8个字节
  6. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

2. 端口号

一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等。这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。端口提供了一种访问通道,服务器一般都是通过知名端口号来识别的。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP (简单文件传送协议) 服务器的UDP端口号都是69。

3. 字节序

  1. 小端字节序 (Little endian):将低序字节存储在起始地址
  2. 大端字节序 (Big endian):将高序字节存储在起始地址
  3. 网络字节序 = 大端字节序

4. Sockt服务器和客户端的开发步骤

1. 服务器

  1. 创建套接字
  2. 为套接字添加信息 (IP地址和端口号)
  3. 监听网络连接
  4. 监听到有客户端接入,接受一个连接
  5. 数据交互
  6. 关闭套接字,断开连接

2. 客户端

  1. 创建套接字
  2. 连接服务器 (输入服务器IP地址和端口号)
  3. 数据交互
  4. 关闭套接字,断开连接
    在这里插入图片描述

二、网络编程API

在Linux系统中,操作系统提供了一系列的API,详细看下图

创建套接字	socket()
绑定		bind()
监听		listen()
连接(服务器)		accept()
连接(客户端)		connect()地址转换		inet_aton() / inet_ntoa
字节序转换	htons() / htonl() / ntohs() / ntohl()

三、API介绍

1. socket函数

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>int socket(int domain, int type, int protocol);1. 函数功能:创建套接字2. 形参说明:
domain:指明所使用的协议族,通常为AF_INET,表示互联网协议族(TCP/IP协议族)- AF_INET	IPV4因特网域- AF_INET6	IPv6因特网域 - AF_UNIX 	Unix域 - AF_ROUTE 	路由套接字- AF_KEY 	密钥套接字 - AF_UNSPEC 未指定
type:指定 socket 的类型- SOCK STREAM流式套接字提供可靠的、面向连接的通信流,它使用 TCP 协议,从而保证了数据传输的正确性和顺序性- SOCK DGRAM数据报套接字定义了一种无连接的服,数据通过相互独立的报文进行传输,是无序的,并且不保证是可靠、无差错的。它使用数据报协议 UDP- SOCK RAW允许程序使用底层协议,原始套接字允许对底层协议如 IP 或 ICMP 进行直接访问,功能强大但使用较为不便,主要用于一些协议的开发
protocal:通常赋值为0- 0 选择 type 类型对应的默认协议- IPPROTO_TCP TCP 传输协议- IPPROTO_UDP UDP 传输协议- IPPROTO_SCTP SCTP 传输协议- IPPROTO_TIPC TIPC 传输协议
3. 返回值:成功,返回套接字的文件描述符;失败,返回-1

2. bind函数

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);1. 函数功能:用于绑定IP地址和端口号到sockfd
2. 形参说明:
sockfd:调用socket函数返回的套接字描述符
addr:是一个指向包含有本机 IP 地址及端口号等信息的 sockaddr 类型的指针,指向要绑定给 sockfd 的协议地址结构,这个地址结构根据地址创建 socket 时的地址协议族的不同而不同(该结构体原型在下方)
addrlen:addr的大小struct sockaddr结构体原型:struct sockaddr {sa_family_t sa_family;char        sa_data[14];};
可同等替换为:struct sockaddr_in {__kernel_sa_family_t  sin_family; /* 协议族 */__be16  sin_port;   /* 端口号 */struct in_addr  sin_addr;   /* IP地址结构体 *//* 填充到结构体sockaddr的大小,没有实际意义,只是为跟sockaddr结构体在内存中对齐,这样两者才能相互转换 */unsigned char  __pad[__SOCK_SIZE__ - sizeof(short int) -sizeof(unsigned short int) - sizeof(struct in_addr)];};
3. 返回值:成功,返回0;失败,返回-1

3. listen函数

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>int listen(int sockfd, int backlog);1. 函数功能:监听设置,设置能处理的最大连接数- 设置能处理的最大连接数,listen() 并末开始接受连线,只是设置 sockect 的 listen 模式,listen 函数只用于服务端,服务路进程不知道要与谁连接,因此,它不会主动地要求与某个进程连接,只是一直监听是否有其他客户进程与之连接,然后响应该连接请求,并对它做出处理,一个服务进程可以同时处理多个客户进程的连接。主要就两个功能:将一个未连接的套接字转换为一个被动套接字(监听),规定内核为相应套接字排队的最大连接数。- 内核为任何一个给定监听套接字维护两个队列:- 未完成连接队列,每个这样的 SYN 报文段对应其中一项:已由某个客户发出并到达服务醒,而服务器正在等待完成相应的 TCP 二次握手过程。这些套接字处于 SYN REVD 状态;- 已完成连接队列,每个已完成 TCP 三次握手过程的客户端对应其中一项。这些套接字处于 ESTABLISHED 状态
2. 形参说明:
sockfd:调用socket函数返回的套接字描述符
backlog:请求队列允许的最大请求数
3. 返回值:成功,返回0;失败,返回-1

4. accept函数

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);1. 函数功能:用于从已完成连接队列队头返回下一个已完成的连接。如果已完成连接队列为空,那么进程被投入睡眠
2. 形参说明:
sockfd:调用socket函数返回的套接字描述符
addr:用来返回已连接的对端(客户端)的协议地址
addrlen:客户端地址长度
3. 返回值:该函数的返回值是一个新的套接字描述符,返回值是表示已连接的套接字描述符,而第一个参数是服务器监听套接字描述符。一个服务器通常仅仅创建一个监听套接字,它在该服务器的生命周期内一直存在,内核为每个由服务器进程接受的客户连接创建一个已连接套接字(表示 TCP 三次挥手已完成),当服务器完成对某个给定客户的服务时,相应的已连接套接字就会被关闭。成功,返回0;失败,返回-1

5. connect函数

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);1. 函数功能:绑定之后的client端(客户端),与服务器建立连接
2. 形参说明:
sockfd:目的服务器的套接字描述符
addr:服务器端的IP地址和端口号的结构体指针
addrlen:addr大小
3. 返回值:成功,返回0;失败,返回-1

6. inet_aton函数

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>int inet_aton(const char *cp, struct in_addr *inp);char *inet_ntoa(struct in_addr in);1. 函数功能:将字符串形式的 IP 地址转为网络能识别的格式
2. 形参说明:
cp:IP地址
inp:存放IP地址的结构体指针(如下所示)struct sockaddr结构体原型:struct sockaddr {sa_family_t sa_family;char        sa_data[14];};
可同等替换为:struct sockaddr_in {__kernel_sa_family_t  sin_family; /* 协议族 */__be16  sin_port;   /* 端口号 */struct in_addr  sin_addr;   /* IP地址结构体 *//* 填充到结构体sockaddr的大小,没有实际意义,只是为跟sockaddr结构体在内存中对齐,这样两者才能相互转换 */unsigned char  __pad[__SOCK_SIZE__ - sizeof(short int) -sizeof(unsigned short int) - sizeof(struct in_addr)];};

7. inet_ntoa函数

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>char *inet_ntoa(struct in_addr in);1. 函数功能:将网络格式的IP地址转为字符串格式
2. 形参说明:
in:存放IP地址的结构体(结构体原型见上方)

8. htons函数

#include <arpa/inet.h>uint16_t htons(uint16_t hostshort);1. 函数功能:返回网络字节序的值(关于什么是字节序请看概述部分),用来转换端口号
2. 形参说明:
hostshort:转换的端口号。h代表host,n代表net,s代表short(两个字节),l代表long(4个字节),通过上面的4个函数可以实现主机字节序和网络字节序之间的转换。有时可以用INADDR_ANY,INADDR_ANY指定地址让操作系统自己获取

四、API的使用例子

实现功能:服务器可以接收各个客户端的信息,每隔五秒服务器向连接的客户端发送信息(类似心跳包)
1. 服务端

  1 #include <stdio.h>2 #include <stdlib.h>3 #include <string.h>4 5 #include <sys/types.h>          /* See NOTES */6 #include <sys/socket.h>7 #include <arpa/inet.h>8 #include <netinet/in.h>9 10 //1. int socket(int domain, int type, int protocol);11 //2. int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);12 //3. uint16_t htons(uint16_t hostshort);13 //4. int inet_aton(const char *cp, struct in_addr *inp);14 //5. int listen(int sockfd, int backlog);15 //6. int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);16 17 int main(int argc, char **argv)18 {19     int mark = 0;20     int c_fd = 0;21     int s_fd = 0;22     int s_bind = 0;23     int c_lent = 0;24     int n_read = 0;25     int s_listen = 0;26 27     char msg[128] = {'\0'};28     char readBuf[128] = {'\0'};29     char sendBuf[128] = {'\0'};30     //char *sendBuf = "Thank you for your message";31 32     struct sockaddr_in s_addr;33     struct sockaddr_in c_addr;34 35     memset(&s_addr, 0, sizeof(struct sockaddr_in));36     memset(&c_addr, 0, sizeof(struct sockaddr_in));37 38     if(argc != 3){39         printf("Please input three params\n");40         exit(-1);41     }42 43     //1. socket44     s_fd = socket(AF_INET, SOCK_STREAM, 0);45     if(s_fd == -1){46         perror("Create socekt failed:");47         exit(-1);48     }49 50     //2. bind51     s_addr.sin_family = AF_INET;52     s_addr.sin_port = htons(atoi(argv[2]));53     inet_aton(argv[1], &s_addr.sin_addr);54 55     s_bind = bind(s_fd, (struct sockaddr *)&s_addr, sizeof(struct sockaddr_in));56     if(s_bind == -1){57         perror("Bind failed:");58         exit(-1);59     }60 61     //3. listen62     s_listen = listen(s_fd, 10);63     if(s_listen == -1){64         perror("Listen failed:");65         exit(-1);66     }67 68     printf("listen...\n");69 70     //4. accept71     while(1){72         c_lent = sizeof(struct sockaddr_in);73         c_fd = accept(s_fd, (struct sockaddr *)&c_addr, &c_lent);74         if(c_fd == -1){75             perror("Accept failed:");76             exit(-1);77         }78 79         printf("Get connect: %s\n", inet_ntoa(c_addr.sin_addr));80 81         mark++;82 83         if(fork() == 0){84             while(1){85                 memset(sendBuf, '\0', sizeof(sendBuf));86 87                 sprintf(sendBuf, "Welcome No.%d client", mark);88                 write(c_fd, sendBuf, sizeof(sendBuf));89                 sleep(5);90 91                 if(fork() == 0){92                     while(1){93                         memset(msg, '\0', sizeof(msg));94                         memset(readBuf, '\0', sizeof(readBuf));95 96                         n_read = read(c_fd, readBuf, sizeof(readBuf));97                         if(n_read == -1){98                             printf("Read failed:");99                         }else{
100                             sprintf(msg, "Get No.%d message: %s", mark, readBuf);
101                             printf("%s\n", msg);
102                         }
103                     }
104                 }
105             }
106         }
107     }
108 
109     return 0;
110 }

2. 客户端

  1 #include <stdio.h>2 #include <stdlib.h>3 #include <string.h>4 5 #include <sys/types.h>          /* See NOTES */6 #include <sys/socket.h>7 #include <arpa/inet.h>8 #include <netinet/in.h>9 10 //1. int socket(int domain, int type, int protocol);11 //2. int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);12 //3. int inet_aton(const char *cp, struct in_addr *inp);13 //4. char *inet_ntoa(struct in_addr in);14 15 int main(int argc, char **argv)16 {17     int c_fd = 0;18     int n_read = 0;19 20     char readBuf[128] = {'\0'};21     char sendBuf[128] = {'\0'};22     //char *sendBuf = "Message from client";23 24     struct sockaddr_in c_addr;25 26     memset(&c_addr, 0, sizeof(struct sockaddr_in));27 28     if(argc != 3){29         printf("Please input three params\n");30         exit(-1);31     }32 33     //1. socket34     c_fd = socket(AF_INET, SOCK_STREAM, 0);35     if(c_fd == -1){36         perror("Create socekt failed:");37         exit(-1);38     }39 40     //2. connect41     c_addr.sin_family = AF_INET;42     c_addr.sin_port = htons(atoi(argv[2]));43     inet_aton(argv[1], &c_addr.sin_addr);44 45     if(connect(c_fd, (struct sockaddr *)&c_addr, sizeof(struct sockaddr_in)) == -1){46         perror("Connect failed:");47         exit(-1);48     }49 50     while(1){51         memset(sendBuf, '\0', sizeof(sendBuf));52 53         printf("input :");54         gets(sendBuf);55         write(c_fd, sendBuf, strlen(sendBuf));56 57         if(fork() == 0){58             while(1){59                 memset(readBuf, '\0', sizeof(readBuf));60 61                 n_read = read(c_fd, readBuf, sizeof(readBuf));62                 if(n_read == -1){63                     printf("Read failed:");64                 }else{65                     printf("Get server message: %s\n", readBuf);66                 }67             }68         }69     }70 71     return 0;72 }

相关文章:

Linux系统编程——网络编程的学习

Linux系统编程学习相关博文 Linux系统编程——文件编程的学习Linux系统编程——进程的学习Linux系统编程——进程间通信的学习Linux系统编程——线程的学习 Linux系统编程——网络编程的学习 一、概述1. TCP/UDP2. 端口号3. 字节序4. Sockt服务器和客户端的开发步骤1. 服务器2…...

Vue中的ref 和$refs的使用

ref 和$refs 作用&#xff1a;利用ref 和$refs可以用于获取dom元素&#xff0c;或组件实例 特点&#xff1a;查找范围→当前组件内&#xff08;更精确稳定&#xff0c;原生的dom在vue子组件中查找最终也会扫描到父组件&#xff09; 1. 获取dom 目标标签–添加ref 属性 <…...

Hive【非交互式使用、三种参数配置方式】

前言 今天开始学习 Hive&#xff0c;因为毕竟但凡做个项目基本就避不开用 Hive &#xff0c;争取这学期结束前做个小点的项目。 第一篇博客内容还是比较少的&#xff0c;环境的搭建配置太琐碎没有写。 Hive 常用使用技巧 交互式使用 就是我们正常的进入 hive 命令行下的使用…...

基于Yolov8的工业小目标缺陷检测(1)

目录 1.工业油污数据集介绍 1.1 小目标定义 1.2 难点 1.3 工业缺陷检测算法介绍 1.3.1 YOLOv8...

Python文件操作和管理指南:打开、读取、写入和管理文件

文章目录 文件&#xff08;File&#xff09;打开文件使用 with ... as 语句打开文件读取文件内容读取大文件的方式逐行读取和读取全部行写文件操作文件定位seek()tell() 关闭文件 文件管理获取目录结构获取当前目录切换当前所在目录创建目录删除目录删除文件重命名文件 总结pyt…...

WebGL 用鼠标控制物体旋转

目录 鼠标控制物体旋转 如何实现物体旋转 示例程序&#xff08;RotateObject.js&#xff09; 代码详解 示例效果 鼠标控制物体旋转 有时候&#xff0c;WebGL程序需要让用户通过鼠标操作三维物体。这一节来分析示例程序RotateObject&#xff0c;该程序允许用户通过拖动&…...

Spring Boot魔法:简化Java应用的开发与部署

文章目录 什么是Spring Boot&#xff1f;1. 自动配置&#xff08;Auto-Configuration&#xff09;2. 独立运行&#xff08;Standalone&#xff09;3. 生产就绪&#xff08;Production Ready&#xff09;4. 大量的起步依赖&#xff08;Starter Dependencies&#xff09; Spring …...

参议院算法Java

Dota2 的世界里有两个阵营: Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定,他们以一个基于轮为过程的投票进行。在每一轮中&#xff0c;每一位参议员都可以行使两项权利中的一项: 禁止一名参议员的权利:参…...

前端提交规范 ESLint + Prettier + husky + lint-staged

如何统一代码风格&#xff0c;规范提交呢&#xff1f; 推荐使用前端规范全家桶 ESLint Prettier husky lint-staged。 eslint (github.com/eslint/esli…)JavaScript 代码检测工具&#xff0c;检测并提示错误或警告信息prettier (github.com/prettier/pr…) 代码自动化格式…...

python实现命令tree的效果

把所有的文档都传到了git上,但是内容过多找起来不方便,突发奇想如果能在readme中,递归列出所有文件同时添加上对应的地址,这样只需要搜索到对应的文件点击就能跳转过去了… 列出文件总得有个显示格式,所以就按照tree的来了… 用python实现命令tree的效果 首先,这是tree的效果…...

Deformable DETR(2020 ICLR)

Deformable DETR&#xff08;2020 ICLR&#xff09; detr训练epochs缩小十倍&#xff0c;小目标性能更好 Deformable attention 结合变形卷积的稀疏空间采样和Transformer的关系建模能力 使用多层级特征层特征,不需要使用FPN的设计&#xff08;直接使用backbone多层级输出&a…...

springboot01

目录 新建Maven工程&#xff0c;什么都不选 ​pom.xml加上 新建包top.cjz.controller 新建类HelloController ​新建类HelloApplication ​运行浏览器访问 新建Maven工程&#xff0c;什么都不选 pom.xml加上 <!--springboot工程需要继承的父工程--> <parent…...

虚拟机中window/ubuntu系统如何联网?

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 &#xff08;1&#xff09;VMware虚拟机中Windows11无法连接网络 &#xff08;2&#xff09;图解vmware虚拟机win8无线上网 &#xff08;3&#xff09;VMware中VMnet0、VMnet1、VMnet8是什么 &…...

计算物理专题----随机游走实战

计算物理专题----随机游走实战 Problem 1 Implement the 3D random walk 拟合线 自旋的 拟合函数&#xff08;没有数学意义&#xff09; 参数&#xff1a;0.627,3.336,0.603&#xff0c;-3.234 自由程满足在一定范围内的均匀分布以标准自由程为单位长度&#xff0c;…...

《思维与智慧》简介及投稿邮箱

《思维与智慧》自1982年创刊&#xff0c;经国家新闻出版署批准&#xff0c;由河北省教育厅主管&#xff0c;河北行知文化传媒有限责任公司主办的益智励 志类大众文化期刊。 《思维与智慧》办刊宗旨是&#xff1a;“开发思维&#xff0c;启迪智慧&#xff0c;滋润心灵”&#x…...

flask+python快速搭建

app.py """APP 入口模块""" from traceback import format_excfrom api_limiter import limiter from flask import Flask, jsonify import loggingfrom controller import api_sql_blueapp Flask(__name__) limiter.init_app(app) app.regist…...

基于微信小程序的美术馆预约平台设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…...

ruoyi-vue-pro yudao 项目商城 mall 模块启用及相关SQL脚本

目前ruoyi-vue-pro 项目虽然开源&#xff0c;但是商城 mall 模块被屏蔽了&#xff0c;查看文档却要收费 199元&#xff08;知识星球&#xff09;&#xff0c;价格有点太高了吧。 分享下如何启用 mall 模块&#xff0c;顺便贴上sql相关脚本。 一、启用模块 修改根目录 pom.xm…...

default 和 delete 与默认构造函数 的使用

前言 使用default和delete关键字来干预编译器自动生成的函数。让我详细解释一下这些知识点&#xff1a; 正文 编译器生成的默认构造函数&#xff1a; 如果类A没有定义任何构造函数&#xff0c;那么编译器会自动生成一个无参的默认构造函数 A()。这个默认构造函数实际上是一个…...

【开发篇】一、热部署

文章目录 1、手工启动热部署2、自动启动热部署3、热部署范围配置4、关闭热部署功能 1、手工启动热部署 日常开发与调试&#xff0c;改几行代码想看效果就得手动点重启&#xff0c;很繁琐&#xff0c;接下来考虑启动热部署。首先引入springboot开发者工具&#xff1a; <dep…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

Vue 3 + WebSocket 实战:公司通知实时推送功能详解

&#x1f4e2; Vue 3 WebSocket 实战&#xff1a;公司通知实时推送功能详解 &#x1f4cc; 收藏 点赞 关注&#xff0c;项目中要用到推送功能时就不怕找不到了&#xff01; 实时通知是企业系统中常见的功能&#xff0c;比如&#xff1a;管理员发布通知后&#xff0c;所有用户…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...