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

【Linux网络编程】服务端编程初体验

文章目录

  • 前言
  • 服务端是啥、有什么特点
  • 核心函数
  • socket的简介
  • 服务器编程
  • 客户端代码
  • The End


前言

在上节课(Linux网络编程初体验)中我们实现了连接bilibili的功能,并获取其html源码在这里插入图片描述
如图所示.
今天我们要自己编写个服务端来服务我们的客户端


提示:以下是本篇文章正文内容,下面案例可供参考

服务端是啥、有什么特点

服务端长期暴露于网络,并等待客户端连接
特点:
服务端无法主动连接客户端
客户端只能按照预定义的方式连接服务端

服务端编程模式:

socket()->bind()->listen()->accept()->client_sock->
send()/recv->close()

核心函数

int bind(int sock,struct sockaddr*addr,socklen_t addrlen);//参数1:服务端sock,参数2:服务端sockaddr,参数3:参数2的大小,类型为socklen_t
int listen(int sock,int backlog);//参数1:服务端sock,参数2:直接填1
int accept(int sock,struct sockaddr*addr,socklen_t*addrlen);//参数1:客户端sock,参数2接受客户端addr的地址,参数3:参数2的长度

accept()的返回值为客户端的sock

socket的简介

服务端socket只用于连接,不进行通讯
服务端的socket用于产生客户端的socket

socket还可以提供不同类型的通信功能(本地、局域网等)

服务器编程

头文件:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

定义服务端的socket和sockaddr_inint server = 0; struct sockaddr_in saddr = {0};
定义要通信的客户端的socket和sockaddr_inint client = 0; struct sockaddr_in caddr = {0};
定义客户端sockaddr_in 的长度变量socklen_t asize = 0;
以及其他的变量

	int len = 0;//发送和接收的字符串长度char buf[32] = {0};//接收区int r = 0;//循环控制变量

创建socket

	server = socket(PF_INET, SOCK_STREAM, 0);if( server == -1 ){printf("server socket error\n");return -1;}

赋值服务端的sockaddr_in

	saddr.sin_family = AF_INET;saddr.sin_addr.s_addr = htonl(INADDR_ANY);//INADDR_ANY:同一wifi下的主机地址都可以saddr.sin_port = htons(8899);

绑定以及监听

	if( bind(server, (struct sockaddr*)&saddr, sizeof(saddr)) == -1 ){printf("server bind error\n");return -1;}if( listen(server, 1) == -1 ){printf("server listen error\n");return -1;}

等待客户端的连接

while(1){asize = sizeof(caddr);//客户端sockaddr_in大小client = accept(server, (struct sockaddr*)&caddr, &asize);if( client == -1 ){printf("client accept error\n");return -1;}printf("client: %d\n", client);}

接收和发送数据:

		do{r = recv(client, buf, sizeof(buf), 0);if( r > 0 ){printf("Receive: %s\n", buf);if( strcmp(buf, "quit") != 0 )//当字符串为quit时,退出{len = send(client, buf, r, 0);break;}else{break;}}} while ( r > 0 );

注意:这里的代码在while(1)里面

代码全貌:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>int main()
{int server = 0;struct sockaddr_in saddr = {0};int client = 0;struct sockaddr_in caddr = {0};socklen_t asize = 0;int len = 0;serverchar buf[32] = {0};int r = 0;server = socket(PF_INET, SOCK_STREAM, 0);if( server == -1 ){printf("server socket error\n");return -1;}saddr.sin_fami0ly = AF_INET;saddr.sin_addr.s_addr = htonl(INADDR_ANY);saddr.sin_port = htons(8888);if( bind(server, (struct sockaddr*)&saddr, sizeof(saddr)) == -1 ){printf("server bind error\n");return -1;}if( listen(server, 1) == -1 ){printf("server listen error\n");return -1;}printf("server start success\n");while( 1 ){asize = sizeof(caddr);client = accept(server, (struct sockaddr*)&caddr, &asize);if( client == -1 ){printf("client accept error\n");return -1;}printf("client: %d\n", client);do{r = recv(client, buf, sizeof(buf), 0);if( r > 0 ){printf("Receive: %s\n", buf);if( strcmp(buf, "quit") != 0 ){len = send(client, buf, r, 0);break;}else{break;}}} while ( r > 0 );close(client);}close(server);return 0;
}

客户端代码

复用上期的服务端
改动:
1、定义input变量,让用户自己输入字符发送给服务端char input[32] = {0};
2、端口号和ip地址
ip地址:在TerMinal中输入ifconfig可以看到ip地址。如下图
在这里插入图片描述
端口号:要和服务器中的一样(8899)

收发数据代码:

	while(1){printf("Input: ");scanf("%s", input);len = send(sock, input, strlen(input) + 1, 0);r = recv(sock, buf, sizeof(buf), 0);if( r > 0 ){printf("Receive: %s\n", buf);}else{break;}}

客户端代码全貌:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>int main()
{int sock = 0;struct sockaddr_in addr = {0};int len = 0;char buf[128] = {0};char input[32] = {0};int r = 0;sock = socket(PF_INET, SOCK_STREAM, 0);if( sock == -1 ){printf("socket error\n");return -1;}addr.sin_family = AF_INET;addr.sin_addr.s_addr = inet_addr("192.168.254.128");addr.sin_port = htons(8899);if( connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1 ){printf("connect error\n");return -1;}printf("connect success\n");while( 1 ){printf("Input: ");scanf("%s", input);len = send(sock, input, strlen(input) + 1, 0);r = recv(sock, buf, sizeof(buf), 0);if( r > 0 ){printf("Receive: %s\n", buf);}else{break;}}close(sock);return 0;
}

The End

大家可以使用下面2个命令编译我们写好的东西:

gcc -o 编译后的文件名.o 编译的文件名.c
./编译后的文件名.o

注意:要先开服务端!!!

相关文章:

同局域网共享虚拟机(VMware)

一、前言 首先我们先来了解下 VMware 的三种网络模式桥接模式、NAT模式、仅主机模式&#xff0c;网络类型介绍详情可以参考下我之前的文档 Linux系统虚拟机安装&#xff08;上&#xff09;第三章 - 第9步指定网络类型。了解三种网络模式的原理之后&#xff0c;再来剖析下需求&…...

《Vite 基础知识》关于 .mjs .cjs 文件引出 NodeJS 对JS模块加载的思考(CommonJS 和 ESM)

前言 学习 Webpack/Vue2 升级 Vite/Vue3 时&#xff0c;发现以下不同&#xff1a; 新建的 Vitepress 项目默认创建了 config.mjs 文件&#xff1b; 新建的 Vite/Vue3 项目&#xff0c;package.json 中默认加上 type: module 配置&#xff1b; 新建的 Vite/Vue3 项目&#xf…...

从WPS AI摘下来的比较实用的办公指令

分类 名称 简介 prompt职场办公 工作计划 根据岗位及工作要求,生成工作计划 现在你扮演一位职场办公人员,我请你帮我写一个[第三季度]的工作计划,目标是[完成测试用例管理后台及至少三个通用的重要业务自动测试脚本]。你的计划需要包括以下要点:工作目标、工作任务、所需资…...

智慧治水丨计讯物联水利RTU助推小型水库出险加固工程建设与管理

日前,水利部印发《关于健全小型水库除险加固和运行管护机制的意见》(以下简称《意见》),健全小型水库除险加固和运行管护常态化机制,提高小型水库安全管理水平。《意见》提出了“十四五”的两大管理机制,通过加快监测设施建设与全管理信息融合共享机制健全小型水库除险加…...

Oracle EBS GL 外币折算逻辑

背景 由于公司财务在10月份期间某汇率维护错误,导致帐套折算以后并合传送至合并帐套生成合并日记帐凭证的借贷金额特别大,但是财务核对的科目余额有没有问题,始终觉得合并日记帐生成会计分发有问题,需要我们给出外币折算逻辑。 基础设置 汇率 Path: GL->设置->币种-&…...

《构建之法》3

1.1节通过三个简短的对话,启发我对什么是程序,什么是软件,什么是软件工程,也了解到了一个软件不是简简单单就能说写就写的,还需要考虑各种因素,如人们的需求,功能的可行性。1.2节详细的给软件工程下定义,介绍软件工程的特殊性,介绍软件工程中的“工程”的由来,讲述了…...

【Linux网络编程】服务端编程初体验

文章目录前言服务端是啥、有什么特点核心函数socket的简介服务器编程客户端代码The End前言 在上节课(Linux网络编程初体验)中我们实现了连接bilibili的功能&#xff0c;并获取其html源码 如图所示. 今天我们要自己编写个服务端来服务我们的客户端 提示&#xff1a;以下是本篇…...

《人类简史》笔记四—— 想象构建的秩序

目录 一、盖起金字塔 1、未来的来临 2、 由想象构建的秩序 3、如何维持构建的秩序 二、 记忆过载 三、亚当和夏娃的一天 一、盖起金字塔 1、未来的来临 原始社会&#xff1a; 人口少&#xff1b; 狩猎和采集&#xff1b; 整体活动范围大&#xff08;有几十甚至上百平方…...

TIDB在centos7.9上通过docker-compose进行安装、备份

1.环境介绍&#xff1a; 在centos7.9上安装tidb docker-compose版本 虚拟机配置2C/8G/40G 最小化安装 2.安装步骤 2.1 安装centos7.9 略 2.2 安装docker &#xff08;1&#xff09;安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2&#xff08;2…...

Spring中Bean的生命周期

先直接说出过程&#xff0c;再来演示具体的操作 过程 简化来说就是 1、首先是实例化Bean&#xff0c;当客户向容器请求一个尚未初始化的bean时&#xff0c;或初始化bean的时候需要注入另一个尚末初始化的依赖时&#xff0c;容器就会调用doCreateBean()方法进行实例化&#xf…...

ACM第三周---周训---题目合集.

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石.CSDN &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​ &#x1f4e3;系列专栏&#xff1a;ACM周训练题目合集.CSDN &#x1f4ac;总结&#xff1a…...

VUE+Spring Boot前后端分离开发实战(六):基于RABC权限通用后台管理系统-给角色动态分配权限和用户

文章目录 前言功能设计后端实现前端实现写在后面前言 本文记录了通用后台管理系统中RABC权限中两个功能:给角色分配权限、给角色设置用户。 给角色分配用户:前端使用到了elementUI中的tree,包括加载树以及给已选配权限给默认值等。给角色设置用户:前端用到了elementUI中的…...

Dockerfile自定义镜像实操【镜像结构、Dockerfile语法、构建Java项目】

要自定义镜像&#xff0c;就必须先了解镜像的结构才行。 1 镜像结构 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。 以MySQL为例&#xff0c;镜像的组成结构&#xff1a; 简单讲&#xff0c;镜像就是在系统函数库、运行环境基础上&#xff0c;添加应用…...

javaScript 进阶之路 --- 《加深理解回调函数》

前言&#xff1a; 回想当初第一次看到“回调函数”这个名词的时候&#xff0c;真的快把我难哭了。所有视频教程在讲到某个知识点的时候&#xff0c;大概都会说一句&#xff1a;“啊&#xff0c;这里怎么办呢&#xff1f;这里我们就需要用到一个回调函数...”。 等等&#xff0…...

Linux开发常用ps命令选项详解

【摘要】本文介绍了在Linux应用/内核开发调试中&#xff0c;经常需要用到的两个选项组合&#xff0c;当然&#xff0c;如果你需要查看更多更详尽的选项说明&#xff0c;可以参考man说明文档&#xff0c;即命令行下输入man ps进行查看。 aux选项组合 使用场景&#xff1a;更多…...

【ceph】分布式存储ceph

1 块存储&#xff0c;文件存储&#xff0c;对象存储 1.1 简介 文件存储&#xff1a;分层次存储&#xff0c;文件存储在文件夹中&#xff1b;访问文件时系统需要知道文件所在的路径。 举例&#xff1a;企业部门之间运用网络存储器&#xff08;NAS&#xff09;进行文件共享。 …...

Spring框架(九):Spring注解开发Annotation

Spring注解开发引子如何用注解替代xml基础配置Bean可以加一些注解来实现原有的xml文件的功能Component注解及其衍生注解依赖注入AutowireSpring非自定义的注解开发Spring其他注解注解的原理解析-xml方式注解的原理解析-注解方式引子 痛定思痛&#xff0c;主要问题出现在自己雀…...

python隶属关系图模型:基于模型的网络中密集重叠社区检测方法

隶属关系图模型 是一种生成模型&#xff0c;可通过社区联系产生网络。下图描述了一个社区隶属关系图和网络的示例&#xff08;图1&#xff09;。最近我们被客户要求撰写关于社区检测的研究报告&#xff0c;包括一些图形和统计输出。 图1.左&#xff1a;社区关系图&#xff08;圆…...

Java实现猜数游戏

1 问题 编写一个Java程序&#xff0c;实现以下功能&#xff1a; 2 方法 首先导入java.util包下的Random&#xff0c;让程序随便分配给用户一个数。 再导入java.util包下的Scanner类&#xff0c;构建Scanner对象&#xff0c;以便输入。 利用Random().nextInt()生成一个随机的i…...

阿里云安装mysql、nginx、redis

目录 安装mysql 安装nginx ​编辑安装redis 先看一下系统基本信息 安装mysql rpm -qa | grep mariadb 卸载mariadb rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 下载mysql源 wget -i http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm yum…...

毕业设计-基于机器视觉的行人车辆跟踪出入双向检测计数

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…...

linux 安装nginx

1.安装依赖包 //一键安装上面四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 2.下载并解压安装包 /或上传解压包 //创建一个文件夹 cd /usr/local mkdir nginx cd nginx //下载tar包 wget http://nginx.org/download/nginx-1.13.7.tar.gz t…...

javaee之黑马旅游网1

这是一个用来锻炼javaweb基础知识的项目&#xff0c;先来导入一些我们准备好的文件 下面这些东西是我们项目必备的&#xff0c;我们提前准备好了 &#xff0c;这个我会上传到我的资源&#xff0c;你们可以自己去下载 利用maven来创建一个项目 选择无骨架创建项目&#xff0c;域…...

【高并发基础】理解 MVCC 及提炼实现思想

文章目录1. 前言2. MVCC 概念2.1 MVCC 版本链2.2 MVCC trx_id2.3 MVCC Read View3. 提出问题4. 解决问题4.1 不读未提交的数据4.1.1 一般的并发情况4.1.2 特殊的并发情况4.1.3 剩下的并发情况4.2 如果自己修改了数据&#xff0c;要第一时间读到5. MySQL RC 使用 MVCC5.1 MVCC D…...

Flow-vue源码中的应用

认识 Flow Flow 是 facebook 出品的 JavaScript 静态类型检查工具。Vue.js 的源码利用了 Flow 做了静态类型检查&#xff0c;所以了解 Flow 有助于我们阅读源码。 #为什么用 Flow JavaScript 是动态类型语言&#xff0c;它的灵活性有目共睹&#xff0c;但是过于灵活的副作用…...

学习python第一天(数据类型)

关于Python的数据类型 Python数据类型包括&#xff1a; 数字类型&#xff0c;字符类型&#xff0c;布尔类型&#xff0c;空类型&#xff0c;列表类型&#xff0c;元组类型&#xff0c;字典类型 1、数字类型 包括&#xff1a;整型int 浮点型float(有小数位的都是是浮点型) 注…...

echarts:nuxt项目使用echarts

一、项目环境 nuxt 2.X vue2.X vuex webpack 二、安装 yarn add echarts 三、使用 3.1、plugins目录下创建echarts.js import Vue from vue import * as echarts from echarts // 引入echarts Vue.prototype.$echarts echarts // 引入组件&#xff08;将echarts注册为全…...

认证服务-----技术点及亮点

大技术 Nacos做注册中心 把新建的微服务注册到Nacos上去 两个步骤 在配置文件中配置应用名称、nacos的发现注册ip地址&#xff0c;端口号在启动类上用EnableDiscoveryClient注解开启注册功能 使用Redis存验证码信息 加入依赖配置地址和端口号即可 直接注入StringRedisTempla…...

【计算机毕业设计】74.家教平台系统源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐…...

Hbase的SQL接口之Phoenix使用心得

PHOENIX 官方定义 A SQL layer over HBase delivered as a client-embedded JDBC drivertargeting low latency queries over HBase data 不同于Hive on HBase的方式&#xff0c;Phoenix将Query Plan直接使用HBaseAPI实现&#xff0c;目的是规避MapReduce框架&#xff0c;减少…...

Springboot萌宠社交分享系统的设计与实现hfdwz计算机毕业设计-课程设计-期末作业-毕设程序代做

Springboot萌宠社交分享系统的设计与实现hfdwz计算机毕业设计-课程设计-期末作业-毕设程序代做 【免费赠送源码】Springboot萌宠社交分享系统的设计与实现hfdwz计算机毕业设计-课程设计-期末作业-毕设程序代做本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言…...

线性代数与解析几何——Part4 欧式空间 酉空间

线性代数与解析几何——Part4 欧式空间 & 酉空间 1. 欧氏空间 1. 定义 & 性质2. 内积表示与标准正交基3. 欧氏空间的同构4. 欧氏空间的线性变换5. 欧氏空间的子空间 2. 酉空间 1. 定义 & 性质2. 酉变换3. Hermite变换4. 规范变换 1. 欧氏空间 1. 定义 & 性质…...

带头双向循环链表的实现

目录前言节点声明链表的初始化尾插打印链表头插尾删头删查找节点指定位置插入指定位置删除链表销毁前言 之前讲过单链表的实现&#xff0c;在实现的过程中&#xff0c;我们会发现每次删除或者在前面插入节点的时候&#xff0c;都要提前保存上一个节点的地址。这样做十分麻烦&a…...

07【C语言 趣味算法】最佳存款方案(采用 从后往前 递推解决)

目录 一、前情回顾二、Problem:最佳存款方案2.1 Description of the problem2.2 Analysis of the problem2.3 Algorithm design2.4 The complete code and the results of the run(完整的代码 以及 运行结果)一、前情回顾 06【C语言 & 趣味算法】牛顿迭代法求方程根(可…...

游戏开发36课 cocoscreator scrollview优化

在cocoscreator内&#xff0c;ScrollView控件封装的挺完美的了&#xff0c;不过对于一些对性能要求比较高的场景&#xff0c;会存在问题&#xff0c;以top100排行榜排行榜举例子 1、应用卡顿甚至崩溃 按照官方用例使用ScrollView&#xff0c;插入100个玩家的item&#xff0c;理…...

屏幕开发学习 -- 迪文串口屏

一 前言 最近学习了一款基于图形化开发的屏幕&#xff0c;在摸索一周后&#xff0c;基本熟悉了这款产品的一个开发过程&#xff0c;今天给大家分享一下迪文串口屏的学习过程&#xff0c;有不足之处&#xff0c;还请见谅&#x1f601;&#xff0c;包含了环境搭建和功能DEMO 二 …...

微机-------CPU与外设之间的数据传送方式

目录 一、无条件方式二、查询方式三、中断方式四、DMA方式一、无条件方式 外设要求:简单、数据变化缓慢。 外设被认为始终处于就绪状态。始终准备好数据或者始终准备好接收数据。 IN AL,数据端口 数据端口的地址通过CPU的地址总线送到地址译码器进行译码,同时该指令进行的是…...

从源码上解决rosdep update失败问题

&#xff08;一&#xff09;卸载官方的rosdep、rosdistro 卸载rosdistro # python2 sudo apt-get purge python-rosdistro# python3 sudo apt-get purge python3-rosdistro卸载rosdep # python2 sudo apt-get purge python-rosdep# python3 sudo apt-get purge python3-rosd…...

常用的shell命令

常用的shell命令 1、ls命令 功能&#xff1a;显示文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示文件属性&#xff0c;包括大小&#xff0c;日期&#xff0c;符号连接&#xff0c;是否可读写及是否可执行 ls -lh 显示文件的…...

新手入门SLAM必备资料

新手入门SLAM必备资料 文章目录 新手入门SLAM必备资料一、SLAM学习书籍1.必读经典2.有很多期,跟着会议一起出的文集3.入门书籍,简单实现及代码4.SLAM入门教材吐血推荐,对深入理解SLAM实质非常有帮助5.作者Joan Sola关于Graph-SLAM的教程,包含位姿变换、传感器模型、图优化以…...

如何选择和使用腾讯云服务器的方法新手教程

本文将介绍如何选择和使用腾讯云服务器的方法新手教程。云服务器能帮助快速构建更稳定、安全的应用&#xff0c;降低开发运维的难度和整体IT成本。腾讯云CVM云服务器提供多种类型的实例、操作系统和软件包。各实例中的 CPU、内存、硬盘和带宽可以灵活调整&#xff0c;以满足应用…...

亚马逊云科技re:Invent:Serverless是所有构想的核心

12月2日&#xff0c;2022亚马逊云科技re:Invent全球大会上&#xff0c;Amazon.com副总裁兼首席技术官Werner Vogels博士向开发者们展示了另一种可能。在一系列Serverless工具的帮助下&#xff0c;一些代码可以少写&#xff0c;因为未来你可能再也不需要写它们了。这恐怕是自云原…...

数据链路层(必备知识)

文章目录1、数据链路层的作用2、认识以太网<1>以太网帧格式<2>认识MAC地址<3>认识MTU<4>查看硬件地址和MTU3、ARP协议<1>什么是ARP协议<2>ARP数据报格式<3>ARP协议的工作机制4、其他重要协议或技术<1> DNS<2>NAT技术1、…...

【Spring系列】- Spring循环依赖

Spring循环依赖 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 一个有梦有戏的人 怒放吧德德 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#xff0c;大…...

Python学习基础笔记二十一——迭代器

列表&#xff0c;我们使用for循环来取值&#xff0c;我们把每个值都取到&#xff0c;不需要关心每一个值的位置&#xff0c;因为只能顺序的取值&#xff0c;并不能跳过任何一个去取其他位置的值。那么我们为什么可以使用for循环来取值&#xff0c;for循环内部是怎么工作的呢&am…...

【云原生之Docker实战】使用docker部署IT资产管理系统GLPI

【云原生之Docker实战】使用docker部署IT资产管理系统GLPI 一、GLPI介绍1.GLPI简介2.GLPI功能二、检查本地docker环境1.检查docker版本2.检查docker状态三、下载GLPI镜像四、编辑docker-compose.yaml文件五、部署GLPI系统1.创建数据目录2.使用docker compose创建容器应用3.查看…...

【SSM框架 二】Spring

文章目录二、Spring1、简介2、IOC理论思想3、Hello Spring4、IOC创建对象的方式4.1 无参构造构造器注入4.2 有参构造器注入5、Spring的配置5.1 别名5.2 Bean的配置5.3 import6、DI依赖注入6.1 构造方法注入6.2 set方法注入6.3 扩展注入6.4、Bean的作用域7、Bean的自动装配7.1 正…...

基于java+ssm+vue+mysql的社区流浪猫狗救助网站

项目介绍 随着迅速的发展&#xff0c;宠物饲养也较以前发生很大的变化&#xff0c;社区流浪猫狗救助网站系统以其独有的优势脱颖而出。“社区流浪猫狗救助网站”是以JAVA程序设计语言课为基础的设计出适合社区流浪猫狗救助网站&#xff0c;其开发过程主要包括后台数据库的建立…...

推特营销引流入门指南

一、关注 当您关注另一个Twitter用户时&#xff0c;您进行订阅&#xff0c;即可立即阅读其内容分享。因此&#xff0c;请评估您关注的人&#xff0c;尤其是刚开始时。跟踪新用户的一种简单方法是找到他们的个人资料&#xff0c;然后单击“关注”按钮。 Twitter对于那些疯狂点…...

Seata概述基础

分布式事务原因&#xff1a; 单体架构的spring事务不能跨机器&#xff0c;不能跨数据源 分布式事务的概念&#xff1a; 一个业务流程&#xff0c;在分布式系统&#xff08;微服务&#xff09;中&#xff0c;每个业务模块都是一个分支&#xff0c;保证每个业务分支一起成功&am…...

Python学习基础笔记二十二——生成器

一个包含yield关键字的函数就是一个生成器函数。yield可以为我们从函数中返回值&#xff0c;但是yield又不同于return&#xff0c;return的执行意味着程序的结束&#xff0c;调用生成器函数不会得到返回的具体的值&#xff0c;而是得到一个可迭代的对象。每一次获取这个可迭代对…...

python -- PyQt5(designer)中文详细教程(四)事件和信号

事件 signals and slots也 被其他⼈翻译成信号和槽机制。 所有的应用都是事件驱动的。事件大部分都是由用户的行为产⽣的&#xff0c;当然也有其他的事件产生方式&#xff0c;比如网络的连接&#xff0c;窗口管理器或者定时器等。调⽤应⽤的exec_()⽅法时&#xff0c;应⽤会进⼊…...

你绝对想象不到的端对端通信的几种方式

一、前言 今天要和大家说的是我们常用的一些端对端的通信方式&#xff0c;这里我们会以python和php语言为主&#xff0c;举例说明客户端、浏览器端和服务器端通信&#xff0c;部分代码可能展示不全&#xff0c;不过我会放在文末链接供大家下载测试&#xff0c;下面我们先来让大…...

序列化--Serial

序列化&#xff1a;将数据结构或对象转换成二进制串的过程。 反序列化&#xff1a;将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。 Parcelable 与 Serializeable 的区别 SerializableParcelable通过IO对硬盘操作&#xff0c;速度较慢直接在内存操作&#x…...

BDD - SpecFlow ExternalData Plugin 导入外部测试数据

BDD - SpecFlow ExternalData Plugin 导入外部测试数据引言SpecFlow ExternalData 插件支持的数据源Tags实践创建一个 Class Libary Project添加 NuGet Packages添加测试数据源文件CSV 文件Excel 文件添加 Feature 文件实现 Step Definition执行Scenario 导入测试数据源Scenari…...

[Power Query] 日期和时间处理

Power Query查询编辑器为日期和时间数据提供了强大而快捷的处理方式 例1: 从日期中提取年、月份、日、季度、周、天等信息 数据源 步骤1:将数据源导入到Power BI Desktop&#xff0c;单击【转换数据】选项&#xff0c;进入Power Query查询编辑器界面 步骤2:选中"日期&qu…...

【0272】postgres内核分配 MyBackendId 实现原理(MyBackendId、MyProc、shmInvalBuffer)(三)

相关文章: 【0255】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(一) 【0256】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(二) 第一个backend process前,shmInvalBuffer的值情况 (gdb) p *shmInvalBuffer $153 = {minMsgNum =...

web组态(BY组态)接入流程

技术文档 官网网站&#xff1a;www.hcy-soft.com 体验地址&#xff1a; www.byzt.net:60/sm 一、数据流向图及嵌入原理 数据流向 嵌入原理 二、编辑器调用业务流程图 三、集成前需要了解的 1、后台Websocket端往前台监控画面端传输数据规则 后台websocket向客户端监控画面…...

关于前后端分离框架的一些疑问

1.既然前后端分离框架已经成为主流框架&#xff0c;那么前后端不分离框架存在的意义是什么? 简化开发: 对于一些简单的应用或者团队实力较弱的情况下&#xff0c;前后端不分离的框架可能更容易上手和开发&#xff0c;因为它将前端和后端的逻辑都集中在了一起&#xff0c;减少…...

面试官问我关于SpringCloud的问题我这么回答,面试官都惊呆了......................

1. 什么是微服务架构&#xff1f; 定义微服务的概念 微服务是一种软件架构设计风格&#xff0c;将大型应用程序划分为一组小型、独立的服务&#xff0c;每个服务都专注于执行特定的业务功能。这些服务可以独立开发、部署、维护&#xff0c;并通过轻量级的通信机制&#xff08…...

spring.factories的常用配置项

概述 spring.factories 实现是依赖 spring-core 包里的 SpringFactoriesLoader 类&#xff0c;这个类实现了检索 META-INF/spring.factories 文件&#xff0c;并获取指定接口的配置的功能。 Spring Factories机制提供了一种解耦容器注入的方式&#xff0c;帮助外部包&am…...

为什么说?上位机开发有广泛的前景

上位机开发展现了广泛的前景&#xff0c;主要有以下几个方面的原因&#xff1a; 广泛应用的C#语言&#xff1a; C#在软件开发领域得到了广泛应用&#xff0c;拥有丰富的库、工具和社区支持&#xff0c;使得学习和使用C#进行上位机开发更加便捷。与Windows密切相关&#xff1a; …...