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

wordpress中调用文章内容培训seo

wordpress中调用文章内容,培训seo,辽宁省工程新希望官网,物流网络节点写在前边 本文是B站up主韦东山的4_8-3.UDP编程示例_哔哩哔哩_bilibili视频的笔记,其中有些部分博主也没有理解,希望各位辩证的看。 UDP协议简介 UDP 是一个简单的面向数据报的运输层协议,在网络中用于处理数据包,是一种无连接的…

写在前边

本文是B站up主韦东山的4_8-3.UDP编程示例_哔哩哔哩_bilibili视频的笔记,其中有些部分博主也没有理解,希望各位辩证的看。

UDP协议简介

UDP 是一个简单的面向数据报的运输层协议,在网络中用于处理数据包,是一种无连接的协议。UDP 不提供可靠性的传输,它只是把应用程序传给 IP 层的数据报发送出去,但是并不能保证它们能到达目的地。由于 UDP 在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

对于UDP网络编程步骤,这里借用韦山东老师的图:

图 3UDP 用户数据包模式

UDP相对于TCP编程来说简单了很多,因为UDP没有TCP那些可靠连接的东西,所以编程相对来说也简单了一些。

这里对于函数,只有发送和接受函数和之前有点区别:

sendto()

函数结构

#include <sys/types.h>#include <sys/socket.h>ssize_t sendto ( socket s , const void * msg, int len, unsigned int flags, conststruct sockaddr * to , int tolen ) ;

描述

sendto() 用来将数据由指定的socket传给对方主机。

参数

- s

用于通信的通信描述符,对于服务器,就是指accept函数返回的通信描述符

- msg

指向一片应用缓存,用于存放要发送的数据,存放数据一般使用结构体变量。

- len

存放发送数据的缓存的大小。

- flags

一般设置为0,此时是阻塞发送的,阻塞发送是指发送数据不成功会一直阻塞,直到被某信号中断或发送成功为止,不过发送数据一般不阻塞。

- to

存放指定欲传送的网络地址,结构sockaddr请参考bind()。

- tolen

sockaddr的结构长度。

- 返回值

成功:返回发送的字节数,失败:返回-1

recvfrom()

函数结构

#include <sys/types.h>#include <sys/socket.h>ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);

描述

它是一个系统调用,用于从套接字接收数据。该函数通常与无连接的数据报服务(如 UDP)一起使用,但也可以与其他类型的套接字使用。与简单的 recv() 函数不同,recvfrom() 可以返回数据来源的地址信息。

参数

- sockfd

一个已打开的套接字的描述符

- buf

指明一个缓冲区,该缓冲区用来存放recvfrom函数接收到的数据

- len

指明buf的长度。

- flags

传0 表示使用默认协议。

- src_addr

一个指针,指向一个 sockaddr 结构,用于保存发送数据的源地址,结构sockaddr请参考bind()。

- addrlen

src_addr的结构长度。当 recvfrom() 返回时,该值会被修改为实际地址的长度(以字节为单位)。

- 返回值

成功:成功执行时,返回接收到的字节数。,失败:返回-1。

剩下的函数请参考TCP中的函数:linux网络编程——TCP编程-CSDN博客

现在分别实现server 程序和client 程序。

server程序

在这个函数中参照server图进行编程,将图中所有函数挨个实现即可。

图 4server

具体实现看代码:

#include <sys/types.h>          /* See NOTES */#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <netinet/in.h>#include <sys/wait.h>#include <unistd.h>#include <arpa/inet.h>#include <pthread.h>/** 服务器端程序* socket* bind* sendto/recvfrom* close*/#define PORT 8888struct Param {int sockfd;char* buff;struct sockaddr* src_addr;};// 接收数据在子线程中处理void* Receive_data(void* Param1){struct Param Param2 = *(struct Param*)Param1;while (1){// 接收数据int addr_len = sizeof(Param2.src_addr);int iRecvLen = recvfrom(Param2.sockfd, Param2.buff, sizeof(Param2.buff), 0, Param2.src_addr, &addr_len);if (iRecvLen > 0){Param2.buff[iRecvLen] = '\0';// inet_ntoa(tSocketClientAddr.sin_addr)是将IP地址转换为字符串的函数printf("Get Msg From Client: %s: %s\n", inet_ntoa(((struct sockaddr_in*)Param2.src_addr)->sin_addr), Param2.buff);}}}int main(int argc, char** argv){int isocketfd;int Client_socketfd;int ret;struct sockaddr_in my_addr;struct sockaddr_in Client_addr;char send_buf[1024];char buff[1000];struct Param Param1;pthread_t ntid;// SOCK_DGRAM是UDP协议,AF_INET表示IPv4协议isocketfd = socket(AF_INET, SOCK_DGRAM, 0);if (-1 == isocketfd){printf("create socket failed!\n");return -1;}// 配置bind函数的地址信息my_addr.sin_family      = AF_INET;  //指定协议族为IPV4版本的TCP/IP协议族my_addr.sin_port        = htons(PORT);  //指定端口号(和客户端通信的端口号,两者必须一致)my_addr.sin_addr.s_addr = htonl(INADDR_ANY);  //指定IP地址,这里设置为INADDR_ANY,表示可以接收任何来源的连接请求ret = bind(isocketfd, (const struct sockaddr*)&my_addr,sizeof(struct sockaddr));if (-1 == ret){printf("bind socket failed!\n");return -1;}Param1.sockfd = isocketfd;Param1.buff = buff;Param1.src_addr = (struct sockaddr*)&Client_addr;ret = pthread_create(&ntid, NULL, Receive_data, &Param1);if (ret){printf("create pthread failed!\n");return -1;}while (1){// 发送数据if (fgets(send_buf, sizeof(send_buf), stdin)){sendto(isocketfd, send_buf, strlen(send_buf), 0, (struct sockaddr*)&Client_addr, sizeof(Client_addr));}}close(isocketfd);return 0;}

这里使用了多线程将发送和接收数据分开,实现发送和接收数据互不干涉,其中pthread_create()函数是创建一个线程,具体函数分析见pthread_create()章节,这里将接收数据放入了创建的子线程中,主函数中实现发送函数。

图 5服务器端测试结果

这里获得的数据,其中192.168.147.132的IP是客户端的数据。

client 程序

在客户端的程序中,基本思路还是和之前服务器的程序相同,都是使用多线程将接收数据放入了创建的子线程中,还是依照韦老师的图:

图 6client

依次实现如上函数即可,具体实现如下代码:

#include <sys/types.h>          /* See NOTES */#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <netinet/in.h>#include <sys/wait.h>#include <unistd.h>#include <arpa/inet.h>#include <pthread.h>/** UDP客户端程序* socket* send* close*/#define PORT 8888// 线程参数结构体struct Param {int sockfd;char* buff;struct sockaddr* src_addr;};// 接收数据在子线程中处理void* Receive_data(void* Param1){struct Param Param2 = *(struct Param*)Param1;while (1){// 接收数据int addr_len = sizeof(Param2.src_addr);int iRecvLen = recvfrom(Param2.sockfd, Param2.buff, sizeof(Param2.buff), 0, Param2.src_addr, &addr_len);if (iRecvLen > 0){Param2.buff[iRecvLen] = '\0';// inet_ntoa(tSocketClientAddr.sin_addr)是将IP地址转换为字符串的函数printf("Get Msg From Client: %s: %s\n", inet_ntoa(((struct sockaddr_in*)Param2.src_addr)->sin_addr), Param2.buff);}else if (iRecvLen == -1){perror("recvfrom failed");break;}}}int main(int argc, char** argv){int isocketfd;struct sockaddr_in client_addr;char send_buf[1024];struct Param Param1;pthread_t ntid;char reve_buff[1024];memset(send_buf, 0, sizeof(send_buf));if (argc < 2){printf("Usage: %s ip_address\n", argv[0]);return -1;}client_addr.sin_family = AF_INET;  //指定协议族为IPV4版本的TCP/IP协议族client_addr.sin_port = htons(PORT);  //指定端口号//指定IP地址,htons()函数是将一个本地字节序的short转为网络字节序的shortclient_addr.sin_addr.s_addr = inet_addr(argv[1]);isocketfd = socket(AF_INET, SOCK_DGRAM, 0);if (-1 == isocketfd){printf("create socket failed!\n");return -1;}Param1.sockfd = isocketfd;Param1.buff = reve_buff;Param1.src_addr = (struct sockaddr*)&client_addr;int ret = pthread_create(&ntid, NULL, Receive_data, &Param1);if (ret){printf("create pthread failed!\n");return -1;}while (1){if (fgets(send_buf, sizeof(send_buf), stdin)){sendto(isocketfd, send_buf, strlen(send_buf), 0, (struct sockaddr*)&client_addr, sizeof(client_addr));}}return 0;}

图 7客户端测试结果

连接成功后即可发送和接收数据。

pthread_create()

函数结构

#include <pthread.h>int pthread_create(pthread_t* restrict tidp,const pthread_attr_t* restrict_attr,void* (*start_rtn)(void*),void *restrict arg);

描述

用来创建线程,并向线程函数传递参数。

参数

- tidp

事先创建好的pthread_t类型的参数。成功时tidp指向的内存单元被设置为新创建线程的线程ID。

- attr

用于定制各种不同的线程属性。通常直接设为NULL。

- start_rtn

新创建线程从此函数开始运行。无参数时arg设为NULL即可。

- arg

start_rtn函数的参数。无参数时设为NULL即可。有参数时输入参数的地址。当多于一个参数时应当使用结构体传入。

- 返回值

成功:返回0,失败:返回错误码。


文章转载自:
http://midinette.qpqb.cn
http://asseveration.qpqb.cn
http://combustor.qpqb.cn
http://temperament.qpqb.cn
http://bethought.qpqb.cn
http://uloid.qpqb.cn
http://pashka.qpqb.cn
http://psychotherapist.qpqb.cn
http://tectonomagnetism.qpqb.cn
http://wystan.qpqb.cn
http://freya.qpqb.cn
http://moundsman.qpqb.cn
http://nonallelic.qpqb.cn
http://solicitant.qpqb.cn
http://obstetrical.qpqb.cn
http://metaplasia.qpqb.cn
http://pinch.qpqb.cn
http://cupid.qpqb.cn
http://overoccupied.qpqb.cn
http://blenny.qpqb.cn
http://glauconitic.qpqb.cn
http://clampdown.qpqb.cn
http://admiring.qpqb.cn
http://dob.qpqb.cn
http://heshvan.qpqb.cn
http://danite.qpqb.cn
http://unpitied.qpqb.cn
http://unevangelical.qpqb.cn
http://monogamist.qpqb.cn
http://emodin.qpqb.cn
http://gondoletta.qpqb.cn
http://menthaceous.qpqb.cn
http://euphonize.qpqb.cn
http://hyperuricemia.qpqb.cn
http://enucleate.qpqb.cn
http://walkover.qpqb.cn
http://immunological.qpqb.cn
http://beefer.qpqb.cn
http://overdry.qpqb.cn
http://fairily.qpqb.cn
http://dulcification.qpqb.cn
http://cayuse.qpqb.cn
http://disenthralment.qpqb.cn
http://erlang.qpqb.cn
http://trank.qpqb.cn
http://yuan.qpqb.cn
http://sabbatic.qpqb.cn
http://bout.qpqb.cn
http://debility.qpqb.cn
http://decagynous.qpqb.cn
http://weakly.qpqb.cn
http://barquentine.qpqb.cn
http://pout.qpqb.cn
http://blockbusting.qpqb.cn
http://french.qpqb.cn
http://carnivorous.qpqb.cn
http://horseway.qpqb.cn
http://guttatim.qpqb.cn
http://corticolous.qpqb.cn
http://goes.qpqb.cn
http://hallucination.qpqb.cn
http://tonsillitis.qpqb.cn
http://chassid.qpqb.cn
http://assignation.qpqb.cn
http://heliotypy.qpqb.cn
http://galvanotactic.qpqb.cn
http://spahi.qpqb.cn
http://decumbent.qpqb.cn
http://gomphosis.qpqb.cn
http://doyenne.qpqb.cn
http://tropaeolin.qpqb.cn
http://thioester.qpqb.cn
http://expurgatory.qpqb.cn
http://keewatin.qpqb.cn
http://attorneyship.qpqb.cn
http://sprent.qpqb.cn
http://cmh.qpqb.cn
http://uniform.qpqb.cn
http://metatrophic.qpqb.cn
http://breakwind.qpqb.cn
http://fixation.qpqb.cn
http://anastasia.qpqb.cn
http://abruptly.qpqb.cn
http://prado.qpqb.cn
http://supercontinent.qpqb.cn
http://melolonthid.qpqb.cn
http://floodlighting.qpqb.cn
http://gnosticism.qpqb.cn
http://erythrogenic.qpqb.cn
http://mammy.qpqb.cn
http://negress.qpqb.cn
http://tying.qpqb.cn
http://dagga.qpqb.cn
http://turrethead.qpqb.cn
http://archanthropine.qpqb.cn
http://doyley.qpqb.cn
http://saginaw.qpqb.cn
http://mact.qpqb.cn
http://sough.qpqb.cn
http://meccano.qpqb.cn
http://www.dt0577.cn/news/98065.html

相关文章:

  • 重庆网站建设 微客巴巴seo广告
  • 北京个人制作网站重庆网站排名优化教程
  • 网站建设 部署与发布做百度推广多少钱
  • 专业建站公司提供详细的功能描述及报价网络查询网站
  • 做网站需要绑定电脑ip吗营销型网站建设公司价格
  • 设计摄影作品湖南百度seo
  • 深圳网站设计clh网店营销策划方案范文
  • angularjs后台管理系统网站站长工具关键词查询
  • wordpress 网站搭建如何做网页
  • 深圳做微信商城网站必应搜索引擎下载
  • 怎么把做的网页放入网站互联网营销推广方案
  • 开发建设网站多久网站搜索排名
  • 张家港网站开发制作互联网推广运营是干什么的
  • 能赚钱的网站如何快速被百度收录
  • 报纸做网站宣传费用网络推广外包注意哪些
  • 请人做网站卖东西好吗关键词seo报价
  • 武进网站建设代理商全国培训机构排名前十
  • adobe 配色 网站外贸建站优化
  • 怎么帮公司做网站建设最佳搜索引擎磁力王
  • idea做网站登录大连做优化网站哪家好
  • 做百度色情网站排名赚钱吗竞价托管推广代运营
  • 网站域名账号有哪些平台可以发布推广信息
  • 山西太原网站建设公司哪家好什么网站可以免费发广告
  • 杭州网站设计公司网络销售怎么聊客户
  • 广州域名企业网站建站哪家好搜索关键词排名查询
  • 麒贺丝网做的网站优化企业推广
  • 泰安市人才交流服务中心seo外链发布技巧
  • 高端网站建设的市场分析百度关键词排名靠前
  • 汽车展示网站阿里巴巴seo排名优化
  • 烟台做网站联系电话拓客引流推广