io+day5

1,select服务端

1 #include<myhead.h>
  2 
  3 #define PORT 8888              //端口号
  4 #define IP "192.168.228.165"       //IP地址
  5 
  6 
  7 int main(int argc, const char *argv[])
  8 {
  9     //1、创建用于接受连接的套接字
 10     int sfd = socket(AF_INET, SOCK_STREAM, 0);
 11     if(sfd == -1)
 12     {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
 13         perror("socket error");
 14         return -1;
 15     }
 16 
 17     printf("socket success sfd = %d\n", sfd);    //4
 18 
 19 
 20     //设置端口号快速重用
 21     int reuse = 1;
 22     if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1)
 23     {
 24         perror("setsockopt error");
 25         return -1;
 26     }
 27     printf("设置端口快速重用成功 _%d_ %s_ %s_\n", __LINE__, __FILE__, __func__);
 28 
 29 
 30 
 31 
 32 
 33     //2、绑定IP地址和端口号
 34     //2.1、填充要绑定的地址信息结构体
 35     struct sockaddr_in sin;
 36     sin.sin_family     = AF_INET;         //表明是ipv4
 37     sin.sin_port     = htons(PORT);        //端口号
 38     sin.sin_addr.s_addr = inet_addr(IP);     //IP地址
 39 
 40     //2.2、绑定
 41     if(bind(sfd, (struct sockaddr*)&sin, sizeof(sin))==-1)
 42     {
 43         perror("bind error");
 44         return -1;
 45     }
 46     printf("bind success _%d_ %s_ %s_\n", __LINE__, __FILE__, __func__);
 47 
 48     //3、将套接字设置成被动监听状态
 49     if(listen(sfd, 128) == -1)
 50     {
 51         perror("listen error");
 52         return -1;
 53     }
 54 
 55     printf("listen success _%d_ %s_ %s_\n", __LINE__, __FILE__, __func__);
 56 
 57     //4、阻塞等待客户端连接请求,如果有新的客户端连接,则创建一个新的用于通信的套接字
 58     //4.1、定义客户端地址信息结构体
 59     struct sockaddr_in cin;             //客户端地址信息结构体
 60     cin.sin_family     = AF_INET;
 61     socklen_t socklen = sizeof(cin);          //客户端地址信息的大小
 62 
 63 
 64     定义一个用于检测文件描述符的集合
 65     fd_set readfds, tempfds;                          //在栈区定义
 66 
 67     清空容器中的内容
 68     FD_ZERO(&readfds);
 69     将要检测的文件描述符放入集合中
 70     FD_SET(sfd, &readfds);           //将sfd文件描述符放入
 71     FD_SET(0, &readfds);             //将0号文件描述符放入
 72 
 73 
 74 
 75     //定义一个容器
 76     char buf[128] = "";
 77     int res = 0;             //接收select的返回值
 78     int newfd = -1;          //存放用于最新连接客户端的套接字
 79     int maxfd = sfd;          //定义控制select函数中最大文件描述符
 80 
 81     struct sockaddr_in saveCin[1024];       //用于存放客户端地址信息结构体
 82 
 83 
 84     while(1)
 85     {
 86         将集合内容复制一份
 87         tempfds = readfds;
 88 
 89         使用select阻塞等待集合中的文件描述符有事件产生
 90         res = select(maxfd+1, &tempfds, NULL, NULL, NULL);
 91         if(res == -1)
 92         {
 93             perror("select error");
 94             return -1;
 95         }else if(res == 0)
 96         {
 97             printf("time out\n");
 98             return -1;
 99         }
100 
101 
102         //遍历所有集合中文件描述符
103         for(int i=0; i<=maxfd; i++)
104         {
105             //判断当前i是否在集合中,如果不在,直接判断下一个
106             if(!FD_ISSET(i, &tempfds))
107             {
108                 continue;
109             }
110 
111             判断sfd是否还在集合中
112             if( i == sfd)
113             {
114                 //4.2、阻塞接收客户端的链接请求,并且获取客户端的地址信息
115                 newfd = accept(sfd, (struct sockaddr*)&cin, &socklen);
116                 if(newfd == -1)
117                 {
118                     perror("accept error");
119                     return -1;
120                 }
121                 printf("accept success _%d_ %s_ %s_\n", __LINE__, __FILE__, __func__);
122 
123                 将newfd放入readfds中
124                 FD_SET(newfd , &readfds);
125 
126                 //更新maxfd
127                 if(newfd > maxfd)
128                 {
129                     maxfd = newfd;
130                 }
131 
132                 //将最新的客户端套接字放入数组的下标为new的位置
133                 saveCin[newfd] = cin;
134                 printf("newfd = %d\n", newfd);
135 
136             }else if(i == 0 )    //判断是否是终端输入
137 
138             {
139                 char buf1[1000] = "";
140 
141                 bzero(buf, sizeof(buf));
142                 //从终端获取数据
143                 fgets(buf, sizeof(buf), stdin);       //从终端获取数据
144                 buf[strlen(buf)-1]='\0';
145                 printf("触发终端输入事件:%s\n", buf);
146 
147                sprintf(buf1, "%s%s", "系统消息:", buf);
148 
149                 //将数据发送给所有客户端
150                 for(int j=4; j<=maxfd; j++)
151                 {
152                     send(j, buf1,sizeof(buf1), 0);
153                 }
154 
155 
156             }else
157             {
158                 //5、收发数据使用newfd完成通信
159                 char buf[128] = "";
160                 //清空字符串
161                 bzero(buf, sizeof(buf));
162                 int ret = recv(i, buf, sizeof(buf), 0);        //从套接字中读取客户端发来的消息
163 
164                 //判断收到的结果
165                 if(ret == 0)
166                 {
167                     printf("客户端已经下线\n");
168                     close(i);             //关闭通信的套接字
169 
170                     将当前的文件描述符从集合中删除
171                     FD_CLR(i, &readfds);
172 
173                     更新maxfd
174                     for(int j=maxfd; j>=0; j--)
175                     {
176                         //判断当前的j是否在集合中,如果在,则为maxfd
177                         if(FD_ISSET(j, &readfds))
178                         {
179                             maxfd = j;
180                             break;
181                         }
182                     }
183 
184                     continue;           //继续判断下一个
185                 }else if(ret < 0)
186                 {
187                     perror("recv error");
188                     return -1;
189                 }
190 
191                 printf("[%s:%d]:%s\n", inet_ntoa(saveCin[i].sin_addr), ntohs(saveCin[i].sin_port), buf);
192 
193                 //将读取的信息,加上一些字符发送回去
194                 strcat(buf, "*_*");
195                 send(i, buf, sizeof(buf), 0);
196 
197 
198             }
199         }
200 
201     }
202 
203 
204 
205     //6、关闭所有套接字
206     close(sfd);               //关闭监听
207 
208     return 0;
209 }
~                                                                                                                          
 #include <myhead.h>
  2 
  3 #define SERPORT 8888              //服务器端口号
  4 #define SERIP "192.168.228.165"       //服务器IP地址
  5 
  6 int main(int argc, const char *argv[])
  7 {
  8     //创建用于通信的套接字
  9     int cfd = socket(AF_INET,SOCK_STREAM,0);
 10     if(cfd == -1)
 11     {
 12         perror("socket error");
 13         return -1;
 14     }
 15 
 16     //连接服务器
 17     ///填充服务器地址信息结构体
 18     struct sockaddr_in sin;
 19     sin.sin_family = AF_INET;
 20     sin.sin_port = htons(SERPORT);
 21     sin.sin_addr.s_addr = inet_addr(SERIP);
 22 
 23     ///连接服务器
 24     if(connect(cfd,(struct sockaddr *)&sin,sizeof(sin)) == -1)
 25     {
 26         perror("connect error");
 27         return -1;
 28     }
 29 
 30     //创建用于检测文件描述符的集合
 31     fd_set readfds,tempfds;
 32 
 33     //清空集合
 34     FD_ZERO(&readfds);
 35 
 36     //将要检测的文件描述符放入集合中
 37     FD_SET(cfd,&readfds);
 38     FD_SET(0,&readfds);
 39 
 40     int res = 0;    //接收select的返回值
 41     int maxfd = cfd;  //集合中值最大的文件描述符
 42 
 43     //向服务器进行数据的收发
 44     char buf[128] = "";
 45     int ret = 0;    //接收recv的返回值
 46     while(1)
 47     {
 48         tempfds = readfds;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
 49 
 50         res = select(maxfd+1,&tempfds,NULL,NULL,NULL);
 51         if(res == -1)
 52         {
 53             perror("select error");
 54             return -1;
 55         }else if(res == 0)
 56         {
 57             printf("time out\n");
 58             return -1;
 59         }
 60 
 61         //遍历集合中所有的文件描述符
 62         for(int i = 0;i <= maxfd;i++)
 63         {
 64             //判断当前文件描述符是否在集合中
 65             if(!FD_ISSET(i,&readfds))
 66             {
 67                 continue;
 68             }
 69 
 70 
 71             //判断0号文件描述符是否还在集合中
 72             if(0 == i)
 73             {
 74                 //从标准输入中读取数据
 75                 fgets(buf,sizeof(buf),stdin);
 76                 buf[strlen(buf)-1] == 0;
 77 
 78                 //将数据发送到服务器
 79                 if(send(cfd,buf,sizeof(buf),0) == -1)
 80                 {
 81                     perror("send error");
 82                     return -1;
 83                 }
 84 
 85             }else if(cfd == i)     //判断cfd是否还在集合中
 86             {
 87                 //接收来自服务器的消息
 88                 ret = recv(cfd,buf,sizeof(buf),0);
 89                 if(ret == -1)
 90                 {
 91                     perror("recv error");
 92                     return -1;
 93                 }else if(ret == 0)
 94                 {
 95                     printf("服务器已关闭\n");
 96                     return -1;
 97                 }
 98 
 99                 printf("服务器消息:%s\n",buf);
100             }
101         }
102     }
103 
104     //关闭文件描述符
105     close(cfd);
106 
107     return 0;
108 }

效果图

poll客户端

  1 #include <myhead.h>
  2 
  3 #define IP "192.168.228.165"
  4 #define PORT 8888
  5 
  6 int main(int argc, const char *argv[])
  7 {
  8     //创建用于连接的套接字
  9     int sfd = socket(AF_INET,SOCK_STREAM,0);
 10     if(sfd == -1)
 11     {
 12         perror("socket error");
 13         return -1;
 14     }
 15 
 16     //绑定服务器IP和端口号
 17     ///填充服务器地址信息结构体
 18     struct sockaddr_in sin;
 19     sin.sin_family = AF_INET;
 20     sin.sin_port = htons(PORT);
 21     sin.sin_addr.s_addr = inet_addr(IP);
 22 
 23     ///绑定
 24     if(bind(sfd,(struct sockaddr *)&sin,sizeof(sin)) == -1)
 25     {
 26         perror("bind error");
 27         return -1;
 28     }
 29     printf("bind success\n");
 30 
 31     //将连接用套接字设置为被动监听状态
 32     if(listen(sfd,128) == -1)
 33     {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
 34         perror("listen error");
 35         return -1;
 36     }
 37     printf("listen success\n");
 38 
 39     //定义一个集合管理sfd和打开的通信用文件描述符
 40     struct pollfd fds[1024];
 41     int maxfd = 0;
 42 
 43 
 44     //手动放入sfd
 45     fds[0].fd = sfd;
 46     fds[0].events = POLLIN;     //表明为读事件
 47 
 48     //将fds中其余元素初始化为-1
 49     for(int i = 4;i <= 1024;i++)
 50     {
 51         fds[i].fd = -1;
 52     }
 53 
 54     //填充客户端地址信息结构体
 55     struct sockaddr_in cin;
 56     cin.sin_family = AF_INET;
 57     socklen_t socklen = sizeof(cin);
 58 
 59 
 60     char cbuf[128] = "";  //给客户端用的容器
 61     int nfd;
 62     int res = 0;  //接收poll返回的结果
 63     while(1)
 64     {
 65         res = poll(fds,maxfd+1,-1);
 66         if(res == -1)
 67         {
 68             perror("select");
 69             return -1;
 70         }
 71         else if(res == 0)
 72         {
 73             continue;;
 74         }
 75         else if(res > 0)                //说明检测到了有文件描述符对应的缓冲区的数据发生了改变
 76         {
 77             if(fds[0].revents ==  POLLIN)    //表明有新的客户连接进来了
 78             {
 79                 int nfd = accept(sfd,(struct sockaddr*)&cin,&socklen);  //阻塞在此处,直到有客户端连接上来
 80                 if(nfd == -1)   //增加这些错误的判断非常重要,可以帮助找到出现问题的地方
 81                 {
 82                     perror("accept");
 83                     return -1;
 84                 }
 85 
 86                 //将新的文件描述符加入到集合中
 87                 for(int i = 1;i < 1024;i++)
 88                 {
 89                     if( fds[i].fd == -1)
 90                     {
 91                         fds[i].fd = nfd;
 92                         fds[i].events = POLLIN;
 93                         break;
 94                     }
 95                 }
 96 
 97                 //更新最大的文件描述符
 98                 if(nfd > maxfd)
 99                 {
100                     maxfd = nfd;
101                 }
102             }
103 
104             for(int i = 1;i <= maxfd;i++)     //轮询客户端对应的文件描述符
105             {
106                 if(fds[i].revents == POLLIN)  //说明此文件描述符对应的客户端发送来了数据
107                 {
108                     int ret = read(fds[i].fd,cbuf,sizeof(cbuf));
109                     if(ret == -1)
110                     {
111                         perror("read");
112                         exit(-1);
113                     }
114                     else if(ret == 0)
115                     {
116                         printf("client closed\n");
117                         close(fds[i].fd);   //关闭对应的文件描述符
118                         fds[i].fd = -1;   //在fds中清空对应的文件描述符
119                     }
120                     else if(ret > 0)
121                     {
122                         printf("read buf = %s\n",cbuf);
123                         write(fds[i].fd,cbuf,strlen(cbuf)+1);
124                     }
125 
126 
127                 }
128             }
129         }
130     }
131     //关闭所有套接字
132     close(sfd);
133 
134     return 0;
135 
1 #include<myhead.h>
  2 #define SERIP "192.168.228.165"
  3 #define SERPORT 8888
  4 #define CLIIP "192.168.228.165"
  5 #define CLIPORT 6666
  6 
  7 int main(int argc, const char *argv[])
  8 {
  9     //1、创建客户端用于通信的套接字
 10     int cfd = socket(AF_INET, SOCK_STREAM, 0);
 11     if(cfd == -1)
 12     {
 13         perror("socket error");
 14         return -1;
 15     }
 16     printf("cfd = %d\n", cfd);                //3
 17 
 18 
 19     //2、绑定(可选)
 20     //2.1、填充地址信息结构体
 21     struct sockaddr_in cin;
 22     cin.sin_family     = AF_INET;            //使用的是ipv4通信
 23     cin.sin_port     = htons(CLIPORT);       //服务器端口号
 24     cin.sin_addr.s_addr     = inet_addr(CLIIP);       //服务器IP地址
 25     //2.2、绑定工作
 26     if(bind(cfd, (struct sockaddr*)&cin, sizeof(cin)) == -1)
 27     {
 28         perror("bind error");
 29         return -1;
 30     }
 31     printf("bind success\n");
 32 
 33 
 34     //3、连接服务器
 35     //3.1、填充服务器地址信息结构体
 36     struct sockaddr_in sin;
 37     sin.sin_family     = AF_INET;            //使用的是ipv4通信
 38     sin.sin_port     = htons(SERPORT);       //服务器端口号
 39     sin.sin_addr.s_addr     = inet_addr(SERIP);       //服务器IP地址                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
 40 
 41     //3.2、连接服务器
 42     if(connect(cfd, (struct sockaddr*)&sin, sizeof(sin)) ==-1)
 43     {
 44         perror("connect error");
 45         return -1;
 46     }
 47     printf("connect success\n");
 48 
 49     //4、收发数据(send、recv、read、write)
 50     char buf[128] = "";
 51     char rbuf[128] = "";
 52 
 53     定义一个集合管理0号文件描述符和cfd
 54     struct pollfd fds[2];
 55 
 56     //将0号文件描述符放入
 57     fds[0].fd = 0;
 58     fds[0].events = POLLIN;          //表明要进行读事件
 59 
 60     //将cfd放入集合
 61     fds[1].fd = cfd;
 62     fds[1].events = POLLIN;
 63 
 64     int res = 0;     //接收poll返回的结果
 65 
 66 
 67     while(1)
 68     {
 69         res = poll(fds, 2, -1);          //第三个参数如果是负数,表明一直等待
 70         if(res == -1)
 71         {
 72             perror("poll error");
 73             return -1;
 74         }else if(res == 0)
 75         {
 76             printf("time out\n");
 77             return -1;
 78         }
 79 
 80 
 81         bzero(buf, sizeof(buf));
 82         bzero(rbuf, sizeof(rbuf));
 83 
 84 
 85 
 86         //判断是否是发送数据满足条件
 87         if(fds[0].revents == POLLIN)
 88         {
 89             fgets(buf, sizeof(buf), stdin);       //从标准输入中读取数据
 90             buf[strlen(buf)-1] = '\0';
 91 
 92             //将数据发送给服务器
 93             send(cfd, buf, sizeof(buf), 0);
 94 
 95             //如果输入的是quit则退出
 96             if(strcmp(buf,"quit") == 0)
 97             {
 98                 break;
 99             }
100         }
101 
102 
103 
104         //判断是否为接收数据满足条件
105         if(fds[1].revents == POLLIN)
106         {
107 
108             //接收服务器发送来的消息
109             int res = recv(cfd, rbuf, sizeof(rbuf), 0);
110             if(res == 0)
111             {
112                 printf("服务器已经关闭\n");
113                 break;
114             }
115             printf("rbuf = %s\n", rbuf);
116         }
117 
118     }
119 
120     //5、关闭客户端套接字
121     close(cfd);
122 
123 
124     return 0;
125 }
126 
~                                                                                

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/177795.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用低代码可视化开发平台快速搭建应用

目录 一、JNPF可视化平台介绍 二、搭建JNPF可视化平台 【表单设计】 【报表设计】 【流程设计】 【代码生成器】 三、使用JNPF可视化平台 1.前后端分离&#xff1a; 2.多数据源&#xff1a; 3.预置功能&#xff1a; 4.私有化部署&#xff1a; 四、总结 可视化低代码…

java_函数式接口

文章目录 一、什么是函数式接口二、四大核心函数式接口三、使用举例 一、什么是函数式接口 如果一个接口只有一个抽象方法&#xff0c;那么该接口就是一个函数式接口函数式接口的实例可以通过 lambda 表达式、方法引用或者构造方法引用来创建如果我们在某个接口上声明了 Funct…

每日一题:LeetCode-589.N叉树的前序遍历

每日一题系列&#xff08;day 01&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

Spring Boot创建和使用(重要)

Spring的诞生是为了简化Java程序开发的&#xff01; Spring Boot的诞生是为了简化Spring程序开发的&#xff01; Spring Boot就是Spring框架的脚手架&#xff0c;为了快速开发Spring框架而诞生的&#xff01;&#xff01; Spring Boot的优点&#xff1a; 快速集成框架&#x…

三维控件中定位一个点_vtkPointWidget

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码 demo解决问题&#xff1a;允许用户使用三维光标在三维空间中定位一个点。关键类vtkPointWidget , 光标具有轮廓边界框、轴对齐十字准线和轴阴影&#xff…

【C++】vector的介绍与使用

&#x1f9d1;‍&#x1f393;个人主页&#xff1a;简 料 &#x1f3c6;所属专栏&#xff1a;C &#x1f3c6;个人社区&#xff1a;越努力越幸运社区 &#x1f3c6;简 介&#xff1a;简料简料&#xff0c;简单有料~在校大学生一枚&#xff0c;专注C/C/GO的干货分…

9、鸿蒙应用桌面图标外观和国际化

一、项目资源目录 项目下的resoueces目录为资源配置目录&#xff0c;其中base为基础配置&#xff0c;即在任何语言环境下都会加载的资源&#xff0c; color.json&#xff1a;用于配置颜色&#xff0c;如页面的背景和文字的颜色。 string.json&#xff1a;用于设置文字&#…

好用的博客评论系统 Valine 使用及避坑指南

评论系统&#xff0c;即网站的一个小功能&#xff0c;展示评论内容和用户输入框。开源免费的评论系统可不多&#xff0c;原来很火的"多说"评论系统都关闭了&#xff0c;而Disqus又是国外的访问受限。无意间发现了Valine&#xff0c;挺不错的&#xff0c;分享给大家。…

UML建模图文详解教程——类图

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;《UML面向对象分析、建模与设计&#xff08;第2版&#xff09;》吕云翔&#xff0c;赵天宇 著 类图概述 类图用来描述系统内各种实体的类型以及不同…

关于软raid的实现及常见问题

RAID概念 磁盘阵列&#xff08;Redundant Arrays of Independent Disks&#xff0c;RAID&#xff09;&#xff0c;有“独立磁盘构成的具有冗余能力的阵列”之意。 磁盘阵列是由很多价格较便宜的磁盘&#xff0c;以硬件&#xff08;RAID卡&#xff09;或软件&#xff08;MDADM&…

【LeetCode刷题】--40.组合总和II

40.组合总和II 本题详解&#xff1a;回溯算法 class Solution {public List<List<Integer>> combinationSum2(int[] candidates, int target) {int len candidates.length;List<List<Integer>> res new ArrayList<>();if (len 0) {return re…

JSP内置对象

一、request对象 1、访问请求参数 2、在作用域中管理属性 3、获取Cookie 4、解决中文乱码 5、获取客户端信息 6、显示国际化信息 是一个javax.servlet.http.HttpServletRequest对象 request封装了用户浏览器提交的信息&#xff0c;因此可以调用相应的方法可以获取这些封…

VMware 16 Pro 安装以及下载

1、下载地址&#xff1a; https://www.aliyundrive.com/s/nj3PSD4TN9G 2、安装文件 右击打开 下一步 密钥&#xff1a;ZF3R0-FHED2-M80TY-8QYGC-NPKYF 到此&#xff0c;安装完毕

【python基础(三)】操作列表:for循环、正确缩进、切片的使用、元组

文章目录 一. 遍历整个列表1. 在for循环中执行更多操作2. 在for循环结束后执行一些操作 二. 避免缩进错误三. 创建数值列表1. 使用函数range()2. 使用range()创建数字列表3. 指定步长。4. 对数字列表执行简单的统计计算5. 列表解析 五. 使用列表的一部分-切片1. 切片2. 遍历切片…

基于单片机停车场环境监测系统仿真设计

**单片机设计介绍&#xff0c; 基于单片机停车场环境监测系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的停车场环境监测系统是一种利用单片机技术实现环境监测和数据处理的系统。它可以感知停车场的温湿…

什么是Jmeter?Jmeter使用的原理步骤是什么?

1.1 什么是 JMeter Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于 Web 应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资源&#xff0c;例如静态文件、Java 小服务程序、CGI 脚本…

6.基于蜻蜓优化算法 (DA)优化的VMD参数(DA-VMD)

代码原理 基于蜻蜓优化算法 (Dragonfly Algorithm, DA) 优化的 VMD 参数&#xff08;DA-VMD&#xff09;是指使用蜻蜓优化算法对 VMD 方法中的参数进行自动调优和优化。 VMD&#xff08;Variational Mode Decomposition&#xff09;是一种信号分解方法&#xff0c;用于将复杂…

Java如何获取泛型类型

泛型&#xff08;Generic&#xff09; 泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型&#xff0c;在实例化时作为参数指明这些类型。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。Ada、Delphi、Eiffel、Java、C#、F#、Swift 和 Vis…

Unity开发之C#基础-File文件读取

前言 今天我们将要讲解到c#中 对于文件的读写是怎样的 那么没接触过特别系统编程小伙伴们应该会有一个疑问 这跟文件有什么关系呢&#xff1f; 我们这样来理解 首先 大家对电脑或多或少都应该有不少的了解吧 那么我们这些软件 都是通过变成一个一个文件保存在电脑中 我们才可以…

基于区域划分的GaN HEMT 准物理大信号模型

GaN HEMT器件的大信号等效电路模型分为经验基模型和物理基模型。经验基模型具有较高精度但参数提取困难&#xff0c;特别在GaN HEMT器件工艺不稳定的情况下不易应用。相比之下&#xff0c;物理基模型从器件工作机理出发&#xff0c;参数提取相对方便&#xff0c;且更容易更新和…