C语言之网络编程(服务器和客户端)
Linux网络编程
1、 套接字:源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。
常用的TCP/IP协议的3种套接字类型如下所示。
(1)流套接字(SOCK_STREAM):
流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission ControlProtocol)协议。
(2) 数据报套接字(SOCK_DGRAM):
数据报套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP(UserDatagram Protocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。
(3) 原始套接字(SOCK_RAW):(一般不用这个套接字)
原始套接字(SOCKET_RAW)允许对较低层次的协议直接访问,比如IP、 ICMP协议,它常用于检验新的协议实现,或者访问现有服务中配置的新设备,因为RAW SOCKET可以自如地控制Windows下的多种协议,能够对网络底层的传输机制进行控制,所以可以应用原始套接字来操纵网络层和传输层应用。比如,我们可以通过RAW SOCKET来接收发向本机的ICMP、IGMP协议包,或者接收TCP/IP栈不能够处理的IP包,也可以用来发送一些自定包头或自定协议的IP包。网络监听技术很大程度上依赖于SOCKET_RAW
2、 套接字基本函数:
(1) 创建套接字:int socket(int family, int type, intprotocol);
功能介绍:
在Linux操作系统中,一切皆文件,这个大家都知道,个人理解创建socket的过程其实就是一个获得文件描述符的过程,当然这个过程会是比较复杂的。可以从内核中找到创建socket的代码,并且socket的创建和其他的listen,bind等操作分离开来。socket函数完成正确的操作是返回值大于0的文件描述符,当返回小于0的值时,操作错误。同样是返回一个文件描述符,但是会因为三个参数组合不同,对于数据具体的工作流程不同,对于应用层编程来说,这些也是不可见的。
参数说明:
从socket创建的函数可以看出,socket有三个参数,family代表一个协议族,比较熟知的就是AF_INET,PF_PACKET等;第二个参数是协议类型,常见类型是SOCK_STREAM,SOCK_DGRAM, SOCK_RAW, SOCK_PACKET等;第三个参数是具体的协议,对于标准套接字来说,其值是0,对于原始套接字来说就是具体的协议值。
(2) 套接字绑定函数: intbind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);
功能介绍:
bind函数主要应用于服务器模式一端,其主要的功能是将addrlen长度 structsockaddr类型的myaddr地址与sockfd文件描述符绑定到一起,在sockaddr中主要包含服务器端的协议族类型,网络地址和端口号等。在客户端模式中不需要使用bind函数。当bind函数返回0时,为正确绑定,返回-1,则为绑定失败。
参数说明:
bind函数的第一个参数sockfd是在创建socket套接字时返回的文件描述符。
bind函数的第二个参数是structsockaddr类型的数据结构,由于structsockaddr数据结构类型不方便设置,所以通常会通过对tructsockaddr_in进行地质结构设置,然后进行强制类型转换成structsockaddr类型的数据,
(3) 监听函数:int listen(int sockfd, int backlog);
功能介绍:
刚开始理解listen函数会有一个误区,就是认为其操作是在等在一个新的connect的到来,其实不是这样的,真正等待connect的是accept操作,listen的操作就是当有较多的client发起connect时,server端不能及时的处理已经建立的连接,这时就会将connect连接放在等待队列中缓存起来。这个等待队列的长度有listen中的backlog参数来设定。listen和accept函数是服务器模式特有的函数,客户端不需要这个函数。当listen运行成功时,返回0;运行失败时,返回值位-1.
参数说明:
sockfd是前面socket创建的文件描述符;backlog是指server端可以缓存连接的最大个数,也就是等待队列的长度。
(4) 请求接收函数: int accept(int sockfd, structsockaddr *client_addr, socklen_t *len);
功能介绍:
接受函数accept其实并不是真正的接受,而是客户端向服务器端监听端口发起的连接。对于TCP来说,accept从阻塞状态返回的时候,已经完成了三次握手的操作。Accept其实是取了一个已经处于connected状态的连接,然后把对方的协议族,网络地址以及端口都存在了client_addr中,返回一个用于操作的新的文件描述符,该文件描述符表示客户端与服务器端的连接,通过对该文件描述符操作,可以向client端发送和接收数据。同时之前socket创建的sockfd,则继续监听有没有新的连接到达本地端口。返回大于0的文件描述符则表示accept成功,否则失败。
参数说明:
sockfd是socket创建的文件描述符;client_addr是本地服务器端的一个structsockaddr类型的变量,用于存放新连接的协议族,网络地址以及端口号等;第三个参数len是第二个参数所指内容的长度,对于TCP来说其值可以用sizeof(structsockaddr_in)来计算大小,说要说明的是accept的第三个参数要是指针的形式,因为这个值是要传给协议栈使用的。
(5)客户端请求连接函数: intconnect(int sock_fd, struct sockaddr *serv_addr,int addrlen);
功能介绍:
连接函数connect是属于client端的操作函数,其目的是向服务器端发送连接请求,这也是从客户端发起TCP三次握手请求的开始,服务器端的协议族,网络地址以及端口都会填充到connect函数的serv_addr地址当中。当connect返回0时说明已经connect成功,返回值是-1时,表示connect失败。
参数说明:
connect的第一个参数是socket创建的文件描述符;第二个参数是一个structsockaddr类型的指针,这个参数中设置的是要连接的目标服务器的协议族,网络地址以及端口号;第三个参数表示第二个参数内容的大小,与accept不同,这个值不是一个指针。
在服务器端和客户端建立连接之后是进行数据间的发送和接收,主要使用的接收函数是recv和read,发送函数是send和write。因为对于socket套接字来说,最终实际操作的是文件描述符,所以可以使用对文件进行操作的接收和发送函数对socket套接字进行操作。read和write函数是文件编程里的知识,所以这里不再做多与的赘述。
3、 有了以上的知识,那么我们就可以编写一个简单的服务器和客户端了
(1) 简易服务器:这个服务器只能与一个客户端相连接,如果有多个客户端就不能用这个服务器进行连接。
代码:#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>#define PORT 9990 //端口号
#define SIZE 1024 //定义的数组大小int Creat_socket() //创建套接字和初始化以及监听函数
{int listen_socket = socket(AF_INET, SOCK_STREAM, 0); //创建一个负责监听的套接字if(listen_socket == -1){perror("socket");return -1;}struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET; /* Internet地址族 */addr.sin_port = htons(PORT); /* 端口号 */addr.sin_addr.s_addr = htonl(INADDR_ANY); /* IP地址 */int ret = bind(listen_socket, (struct sockaddr *)&addr, sizeof(addr)); //连接if(ret == -1){perror("bind");return -1;}ret = listen(listen_socket, 5); //监听if(ret == -1){perror("listen");return -1;}return listen_socket;
}int wait_client(int listen_socket)
{struct sockaddr_in cliaddr;int addrlen = sizeof(cliaddr);printf("等待客户端连接。。。。\n");int client_socket = accept(listen_socket, (struct sockaddr *)&cliaddr, &addrlen); //创建一个和客户端交流的套接字if(client_socket == -1){perror("accept");return -1;}printf("成功接收到一个客户端:%s\n", inet_ntoa(cliaddr.sin_addr));return client_socket;
}void hanld_client(int listen_socket, int client_socket) //信息处理函数,功能是将客户端传过来的小写字母转化为大写字母
{char buf[SIZE];while(1){int ret = read(client_socket, buf, SIZE-1);if(ret == -1){perror("read");break;}if(ret == 0){break;}buf[ret] = '\0';int i;for(i = 0; i < ret; i++){buf[i] = buf[i] + 'A' - 'a';}printf("%s\n", buf);write(client_socket, buf, ret);if(strncmp(buf, "end", 3) == 0){break;}}close(client_socket);
}int main()
{int listen_socket = Creat_socket();int client_socket = wait_client(listen_socket);hanld_client(listen_socket, client_socket);close(listen_socket);return 0;
}
(2) 多进程并发服务器:该服务器就完全弥补了上一个服务器的不足,可以同时处理多个客户端,只要有客户端来连接它,他就能响应。在我们这个服务器中,父进程主要负责监听,所以在父进程一开始就要把父进程的接收函数关闭掉,防止父进程在接收函数处阻塞,导致子进程不能创建成功。同理,子进程主要负责接收客户端,并做相关处理,所以子进程在一创建就要把监听函数关闭,不然会导致服务器功能的紊乱。这个服务器有一个特别要注意的是,子进程在退出时会产生僵尸进程,所以我们一定要对子进程退出后进行处理。
代码:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <signal.h>
#include <sys/wait.h>#define PORT 9990
#define SIZE 1024int Creat_socket() //创建套接字和初始化以及监听函数
{int listen_socket = socket(AF_INET, SOCK_STREAM, 0); //创建一个负责监听的套接字 if(listen_socket == -1){perror("socket");return -1;}struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET; /* Internet地址族 */addr.sin_port = htons(PORT); /* 端口号 */addr.sin_addr.s_addr = htonl(INADDR_ANY); /* IP地址 */int ret = bind(listen_socket, (struct sockaddr *)&addr, sizeof(addr)); //连接if(ret == -1){perror("bind");return -1;}ret = listen(listen_socket, 5); //监听if(ret == -1){perror("listen");return -1;}return listen_socket;
}int wait_client(int listen_socket)
{struct sockaddr_in cliaddr;int addrlen = sizeof(cliaddr);printf("等待客户端连接。。。。\n");int client_socket = accept(listen_socket, (struct sockaddr *)&cliaddr, &addrlen); //创建一个和客户端交流的套接字if(client_socket == -1){perror("accept");return -1;}printf("成功接收到一个客户端:%s\n", inet_ntoa(cliaddr.sin_addr));return client_socket;
}void hanld_client(int listen_socket, int client_socket) //信息处理函数,功能是将客户端传过来的小写字母转化为大写字母
{char buf[SIZE];while(1){int ret = read(client_socket, buf, SIZE-1);if(ret == -1){perror("read");break;}if(ret == 0){break;}buf[ret] = '\0';int i;for(i = 0; i < ret; i++){buf[i] = buf[i] + 'A' - 'a';}printf("%s\n", buf);write(client_socket, buf, ret);if(strncmp(buf, "end", 3) == 0){break;}}close(client_socket);
}void handler(int sig)
{while (waitpid(-1, NULL, WNOHANG) > 0){printf ("成功处理一个子进程的退出\n");}
}int main()
{int listen_socket = Creat_socket();signal(SIGCHLD, handler); //处理子进程,防止僵尸进程的产生while(1){int client_socket = wait_client(listen_socket); //多进程服务器,可以创建子进程来处理,父进程负责监听。int pid = fork();if(pid == -1){perror("fork");break;}if(pid > 0){close(client_socket);continue;}if(pid == 0){close(listen_socket);hanld_client(listen_socket, client_socket);break;}}close(listen_socket);return 0;
}
(3) 多线程并发服务器:上一个多进程服务器有一个缺点,就是每当一个子进程得到响应的时候,都要复制父进程的一切信息,这样就导致了CPU资源的浪费,当客户端有很多来连接这个服务器的时候,就会产生很多的子进程,会导致服务器的响应变得很慢。所以我们就想到了多线程并发服务器,我们知道线程的速度是进程的30倍左右,所以我们就用线程来做服务器。
代码: #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <unistd.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h>#define PORT 9990 #define SIZE 1024int Creat_socket() //创建套接字和初始化以及监听函数 {int listen_socket = socket(AF_INET, SOCK_STREAM, 0); //创建一个负责监听的套接字 if(listen_socket == -1){perror("socket");return -1;}struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET; /* Internet地址族 */addr.sin_port = htons(PORT); /* 端口号 */addr.sin_addr.s_addr = htonl(INADDR_ANY); /* IP地址 */int ret = bind(listen_socket, (struct sockaddr *)&addr, sizeof(addr)); //连接if(ret == -1){perror("bind");return -1;}ret = listen(listen_socket, 5); //监听if(ret == -1){perror("listen");return -1;}return listen_socket; }int wait_client(int listen_socket) {struct sockaddr_in cliaddr;int addrlen = sizeof(cliaddr);printf("等待客户端连接。。。。\n");int client_socket = accept(listen_socket, (struct sockaddr *)&cliaddr, &addrlen); //创建一个和客户端交流的套接字if(client_socket == -1){perror("accept");return -1;}printf("成功接收到一个客户端:%s\n", inet_ntoa(cliaddr.sin_addr));return client_socket; }void hanld_client(int listen_socket, int client_socket) //信息处理函数,功能是将客户端传过来的小写字母转化为大写字母 {char buf[SIZE];while(1){int ret = read(client_socket, buf, SIZE-1);if(ret == -1){perror("read");break;}if(ret == 0){break;}buf[ret] = '\0';int i;for(i = 0; i < ret; i++){buf[i] = buf[i] + 'A' - 'a';}printf("%s\n", buf);write(client_socket, buf, ret);if(strncmp(buf, "end", 3) == 0){break;}}close(client_socket); }int main() {int listen_socket = Creat_socket();while(1){int client_socket = wait_client(listen_socket);pthread_t id;pthread_create(&id, NULL, hanld_client, (void *)client_socket); //创建一个线程,来处理客户端。pthread_detach(id); //把线程分离出去。}close(listen_socket);return 0; }
代码:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>#define PORT 9990
#define SIZE 1024int main()
{int client_socket = socket(AF_INET, SOCK_STREAM, 0); //创建和服务器连接套接字if(client_socket == -1){perror("socket");return -1;}struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET; /* Internet地址族 */addr.sin_port = htons(PORT); /* 端口号 */addr.sin_addr.s_addr = htonl(INADDR_ANY); /* IP地址 */inet_aton("127.0.0.1", &(addr.sin_addr));int addrlen = sizeof(addr);int listen_socket = connect(client_socket, (struct sockaddr *)&addr, addrlen); //连接服务器if(listen_socket == -1){perror("connect");return -1;}printf("成功连接到一个服务器\n");char buf[SIZE] = {0};while(1) //向服务器发送数据,并接收服务器转换后的大写字母{printf("请输入你相输入的:");scanf("%s", buf);write(client_socket, buf, strlen(buf));int ret = read(client_socket, buf, strlen(buf));printf("buf = %s", buf);printf("\n");if(strncmp(buf, "END", 3) == 0) //当输入END时客户端退出{break;}}close(listen_socket);return 0;
}
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- java8函数式编程实例
什么是函数式编程函数式编程是java8的一大特色,也就是将函数作为一个参数传递给指定方法。别人传的要么是基本数据类型,要么就是地址引用 ,我们要穿一个“动作”。Stream说到函数式编程,就不得不提及Stream,Stream跟我们熟知的io流可不是同一个东西,泛指可以顺序执行或者…...
2024/4/20 21:16:45 - stc单片机学习的第一篇 了解熟悉篇
1 板上的型号:STC89C58RD+40I-PLCC STC单片机选型指南 这个型号的长处 选择 STC89C51RC 及 STC89C58RD+ 系列单片机的理由: ★加密性强,无法解密 ★超强抗干扰: 1 、高抗静电(ESD保护) 2 、轻松过 2KV/4KV快速脉冲干扰(EFT 测试) 3 、宽电…...
2024/4/28 15:01:43 - 15款android设备上的代码编辑器,超级方便!
如果你希望你的Android设备,如智能手机和平板电脑,在任何时间和任何地方都能够编写代码,那么,不妨看看下面我将介绍的15款Android代码编辑器,它们必将成为你的理想工具。1.Deuter IDE一款基于移动开发的文本编辑器,在线编译器,内置支持Android的集成开发环境。它的虚拟按…...
2024/4/27 21:26:52 - 量子计算机和量子编程的学习步骤汇总
一、什么是量子编程? 量子编程是一组使用高级设计表达量子算法的编程语言。一台典型的计算机基于一个位二进制变量,它只有两个可能的值(0或1,true或false)。量子计算机是基于量子比特的。Kubit意味着在0到1之间还有很多其他的变量被称为叠加。常规计算机不如量子计…...
2024/4/20 21:16:41 - 单片机控制系统要经过的四项测试
单片机控制系统要经过的四项测试 1.测试单片机软件功能的完善性。这是针对所有单片机系统功能的测试,测试软件是否写的正确完整。 2.上电、掉电测试。在使用中用户必然会遇到上电和掉电的情况,可以进行多次开关电源,测试单片机系统的可靠性。 3.老化测试。测试长时间工…...
2024/4/20 17:28:01 - QT教程,QT从入门到实战教程完整版
Qt是一个跨平台开发框架,可以使用C++和Qml开发,同时它又不仅仅只是开发框架,它也是一种技术策略,可以让你快速、高效地设计、开发、部署和维护软件,同时在所有设备上提供无缝的用户体验。因而,对于C/C++工程师而言,QT是必须要学习的一个跨平台开发框架,今天分享一个QT教…...
2024/4/20 23:38:54 - 在vue-cli3.0里使用ue富文本编辑器报错
vue-cli2 在congig这个js文件里window.UEDITOR_HOME_URL这个是编辑器实例的路径这个文件在项目里的static里的ue文件夹里所以 window.UEDITOR_HOME_URL = ‘/static/UE/’; vue-cli3 在congig这个js文件里这个文件在项目里的public里的ue文件夹里所以 window.UEDITOR_HOME_URL …...
2024/4/20 23:38:57 - EMC测试等级区分
EMI的等级和EMS的不一样.EMC=EMI+EMS.EMI是设备对外骚扰,EMS是设备抗外界骚扰.EMI中,classA是工业等级,classB是民用等级.民用的当然要比工业的严格,因为工业用的允许辐射稍微大一点,可以理解吧.EMS中的等级是指classA:测试完成后设备仍在正常工作,classB:测试完成或测试中需要…...
2024/4/20 23:38:53 - vb.net 教程 目录
最新更新:在 vb.net教程 中更新了:vb.net 教程 5-19 拓展:制作一个QQ大家来找茬和美女找茬辅助工具 (2019-11-25 16:29:53)vb.net 教程 5-20 拓展 论坛图片批量转换 (2019-11-25 16:19:31)vb.net 教程 5-21 拓展 如何给IE浏览器截图 2019年11月25日 16:58:13更进一步的v…...
2024/4/20 23:38:52 - 百度Ueditor富文本编辑器基础使用配置以及怎样保存图片到磁盘
1.下载ueditor,地址:http://ueditor.baidu.com/website/download.html2.我下载的是jsp版本的3.下载解压后,把整个文件夹下面的东西全部放到一个目录下,我放在了ueditor文件夹下。4.之后会报错,因为没有相应的jar包。打开jsp文件夹,会有一个lib文件夹,把整个lib文件夹复制…...
2024/4/20 4:56:08 - ESD测试级别及方法
静电测试(ESD)测试环境:温度15~35℃,湿度30%~60%测试目的:测试样机抗静电干扰性能参考标准:GB/T 17626.2-1998 IEC 61000-4-2:2001测试设备:静电枪、综测仪静电测试(ESD)等级: (1)接触放电: +/-4KV(国标)、 +/-6KV、 +/-8KV、 +/-10KV (2)空气放电: +…...
2024/4/20 23:38:49 - 如何自学Android编程?(Android入门到精通的全路线)
(本文转自stormzhang的公众号,Crtl CV下来用以保存)你们期待的终于来了,我可以算作是Android自学界的鼻祖了,之前自学的故事与分享的知识、经验影响了无数人,如今几年过去了,我经常收到不少人的感谢信,很多当初看我的教程的初学者如今已经在Android开发小有成就,而且让…...
2024/4/20 23:38:48 - 抗扰度试验--EMS--电快速瞬变脉冲群--EFT
电快速瞬变脉冲群 平时我们在机械开关切换电感性负载时看到的电弧放电,实际上是在供电线路中产生一连串的高压窄脉冲。这里,供电线路的分布电感起到阻挡脉冲、不被电源短路的作用。下图是实测的开关断开过程中的瞬变干扰的形成情况。可见“尖刺”电压一次比一次大,“尖刺”的…...
2024/4/20 23:38:47 - 少儿创意学编程(Scratch基础篇):第1课——摇滚乐队
《少儿创意学编程(Scratch基础篇)》,参考了英国公益组织发起的“code club(代码俱乐部)”——少儿免费学编程活动。愿为中国的少儿创意编程教育尽微薄之力,对国内的家长、信息教师和相关教育机构有所帮助,共同促进软件素质教育的发展。本课程以Scratch软件为教育工具。S…...
2024/4/20 11:43:18 - 少儿编程Scratch学习教程--Scratch3.0官网免费下载安装
今天去Scratch的官网,发现了新版本的Scratch桌面软件。有兴趣的可以自己下载安装一下,免费的。地址是https://scratch.mit.edu/download里面有windows版和macOS版,对系统的要求还是有一些高的。windows支持Windows 10+,mac支持macOS 10.13+。我使用的是mac机,下载安装后,…...
2024/4/28 18:26:39 - PCBA可靠性测试有哪些?
转至: http://www.greattong.com/archives/view-1269-1.htmlPCBA测试是PCBA制程中控制产品品质的一个重要环节,是为了检测PCBA板是否有足够的可靠性来完成以后的工作,这会直接关系到以后的用户体验和返修率,所以PCBA可靠性测试显得尤为重要。一般的PCBA可靠性测试分为ICT测…...
2024/4/20 23:38:45 - 百度富文本编辑器ueditor上传文件到对象存储BOS中
此前做了一个百度富文本编辑器ueditor上传文件到bcs中的整合说明,并附上了整合文件下载,岂料百度在BAE3.0时不再支持BCS,导致原来上传的图片不能访问,代码不能工作。这里说一点,百度在未通知用户的情况下,直接将之前的bcs设为不能访问,是一个非常不负责任的做法,希望下…...
2024/4/20 6:18:00 - Matlab面向对象编程
最近了解了Matlab也可以面向对象编程,虽然Matlab各种工具箱其实很类似OOP了,最开始接触OOP还是在学习Java的时候,Java的特性会让你很容易接受这一理念,但是MATLAB就没有那么好理解了,记载如下:Matlab支持面向对象编程,主要有两种方式,一种是利用class命令,一种是利用c…...
2024/4/20 23:38:42 - EMC各种测试原理分析及特点
EFT:1.特点:上升时间快,持续时间段,能量低,但具有较高的重复频率。2.干扰机理:EFT对线路中的半导体结电容单向连续充电累积,引起线路乃至设备的误动作...
2024/4/20 8:28:37 - 高中生如何学习编程
高中生如何学习编程 ----From a high schoolstudents view to learn Python关键字: python 高中生学编程 MIT公开课视频 计算机科学及编程导论 无经验学编程 在高中阶段,很多的学生都从以前的学奥数、学英语转向了学一些计算机的知识,一方面是为了将来更好选专业,一方面也是…...
2024/4/20 23:38:42
最新文章
- Python_AI库 Numpy常用的统计函数介绍
Python_AI库 Numpy常用的统计函数介绍 本文默认读者具备以下技能: 熟悉python基础知识,vscode或其它编辑工具 熟悉表格文件的基本操作 具备基本的高等数学常识,能看得懂矩阵运算 具备自主扩展学习能力 本文涉及的函数主要包含: np.sum(arr…...
2024/4/28 19:16:22 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - audio_video_img图片音视频异步可视化加载
最近在做即时消息,消息类型除了文字还有音频、视频、图片展示,如果消息很多,在切换聊天框时,会有明显卡顿,后续做了懒加载,方案是只加载用户能看到的资源,看不到的先不加载; LazyAud…...
2024/4/27 13:10:31 - Stable Diffusion的界面参数详解
Stable Diffusion作为一款强大的文本到图像生成模型,其界面参数是用户与模型进行交互的重要桥梁。这些参数不仅影响着模型的生成效果,还能够帮助用户更加精准地控制生成图像的风格、内容等。本文将详细介绍Stable Diffusion的界面参数,帮助用户更好地理解和应用这一工具。 …...
2024/4/25 11:56:34 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/28 13:52:11 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/28 3:28:32 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/28 13:51:37 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/28 15:57:13 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/28 1:22:35 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/27 11:43:08 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/27 8:32:30 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57