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

网站搜索排名优化seo知识分享

网站搜索排名优化,seo知识分享,汉中网站设计,网站建设及模板使用教程一、域套接字的概念 1.只能做一台主机内的进程间通信,协议族(地址族)指定为:AF_UNIX AF_LOCAL 2.bsp-lcd: s类型文件,就是域套接字 3.如果客户端不手动绑定,则操作系统不会创建一个套接字文件…

一、域套接字的概念

1.只能做一台主机内的进程间通信,协议族(地址族)指定为:AF_UNIX AF_LOCAL

2.bsp-lcd: s类型文件,就是域套接字

3.如果客户端不手动绑定,则操作系统不会创建一个套接字文件给客户端自动绑定的。

二、域套接字的函数使用

1)socket

功能:在内核空间中创建套接字文件(接收缓冲区,发送缓冲区),并返回该套接字文件的文件描述符到用户空间

原型:

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
int socket(int domain, int type, int protocol);

参数:

参数:int domain:协议族,地址族;Name                Purpose                          Man pageAF_UNIX, AF_LOCAL   Local communication              unix(7)int type: 套接字类型  SOCK_STREAM:字节流式套接字,流式套接字---->TCP协议SOCK_DGRAM: 数据报式套接字,报式套接字---->UDP协议SOCK_RAW:原始套接字,该套接字使用的协议需要在第三个参数指定;int protocol:指定协议,默认协议填0;TCP协议: IPPROTO_TCP    IPPROTO_UDP

返回值:

>0 , 成功,返回套接字文件描述符;
=-1, 失败,更新errno;

2)bind

功能:将地址信息绑定到套接字文件描述符上

原型:

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

参数:

int sockfd:指定要将地址信息绑定到哪个套接字文件描述符上;
struct sockaddr *addr:通用地址信息结构体,真实的地址信息结构体根据地址族指定.该结构体中需要填充上IP和端口,由bind函数绑定到套接字上。
AF_UNIX : man 7 unix
struct sockaddr_un {sa_family_t sun_family;               /* AF_UNIX */     必须填AF_UNIXchar        sun_path[108];            /* pathname */    套接字文件路径,必须事 
先不存在,由bind函数生成!};
socklen_t addrlen:真实的地址信息结构体的长度,sizeof(struct sockaddr_un);

返回值:

成功,返回0;
失败,返回-1,更新errno;

3)access

功能:判断文件是否存在,或者文件是否有某种权限

4)unlink

功能:删除文件(的硬链接)

三、流式域套接字

1)UNIX TCP服务器

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <sys/un.h>#define ERR_MSG(msg)  do{\fprintf(stderr, "__%d__ ", __LINE__);\perror(msg);\
}while(0)int main(int argc, const char *argv[])                                                                   
{//创建流式套接字int sfd = socket(AF_UNIX, SOCK_STREAM, 0);if(sfd < 0){ERR_MSG("socket");return -1;}//判断域套接字文件是否存在if(access("./unix", F_OK) == 0){//若存在则删除unlink("./unix");}//填充服务器的地址信息结构体。AF_UNIX: man 7 unixstruct sockaddr_un sun;sun.sun_family      = AF_UNIX;      //必须填AF_UNIXstrcpy(sun.sun_path, "./unix");     //套接字文件路径//绑定服务器的IP和端口--->必须绑定if(bind(sfd, (struct sockaddr *)&sun, sizeof(sun)) < 0){ERR_MSG("bind");return -1;}printf("bind success\n");//将套接字设置为被动监听状态,监听是否有客户端连接if(listen(sfd, 128) < 0){ERR_MSG("listen");return -1;}printf("listen success\n");struct sockaddr_un cun;         //存储客户端地址信息socklen_t addrlen = sizeof(cun);//阻塞函数,阻塞等待客户端连接成功; 从已完成连接的队列头中获取一个客户端信息,生成一个新的文件描述符;//这个新的文件描述符,才是与客户端通信的文件描述符;int newfd = accept(sfd, (struct sockaddr*)&cun, &addrlen);if(newfd < 0){ERR_MSG("accept");return -1;}printf("[%s] newfd=%d 客户端连接成功\n", cun.sun_path, newfd);char buf[128] = "";ssize_t res = 0;while(1){bzero(buf, sizeof(buf));//接收数据res = recv(newfd, buf, sizeof(buf), 0);if(res < 0){ERR_MSG("recv");return -1;}else if(0 == res){printf("[%s] newfd=%d 客户端下线\n", cun.sun_path, newfd);break;}printf("[%s] newfd=%d : %s\n", cun.sun_path, newfd, buf);//发送数据strcat(buf, "*_*");     //可以修改成从其他地方获取if(send(newfd, buf, sizeof(buf), 0) < 0){ERR_MSG("send");return -1;}printf("发送成功\n");}close(newfd);//关闭文件描述符if(close(sfd) < 0){ERR_MSG("close");return -1;}return 0;
}

2)UNIX TCP 客户端

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <sys/un.h>#define ERR_MSG(msg)  do{\fprintf(stderr, "__%d__ ", __LINE__);\perror(msg);\
}while(0)int main(int argc, const char *argv[])
{//创建流式套接字int cfd = socket(AF_UNIX, SOCK_STREAM, 0);if(cfd < 0){ERR_MSG("socket");return -1;}//填充客户端自身的地址信息结构体。AF_UNIX: man 7 unix//绑定客户端的地址信息--->非必须绑定//如果客户端不手动绑定,则操作系统不会创建一个套接字文件给客户端自动绑定的。//填充服务器的地址信息结构体,给connect函数使用。//要连接哪个服务器,就填充哪个服务器绑定的地址信息struct sockaddr_un sun;sun.sun_family      = AF_UNIX;      //必须填AF_UNIXstrcpy(sun.sun_path, "./unix");//连接服务器if(connect(cfd, (struct sockaddr*)&sun, sizeof(sun)) < 0){ERR_MSG("connect");return -1;}printf("connect success\n");char buf[128] = "";ssize_t res = 0;while(1){bzero(buf, sizeof(buf));//发送数据printf("请输入>>> ");fgets(buf, sizeof(buf), stdin);buf[strlen(buf)-1] = 0;//对方接收多少个字节,发送多少个字节if(send(cfd, buf, sizeof(buf), 0) < 0){ERR_MSG("send");return -1;}printf("发送成功\n");bzero(buf, sizeof(buf));//接收数据                                                               res = recv(cfd, buf, sizeof(buf), 0);if(res < 0){ERR_MSG("recv");return -1;}else if(0 == res){printf("cfd=%d 服务器下线\n", cfd);break;}printf("cfd=%d : %s\n", cfd, buf);}//关闭文件描述符if(close(cfd) < 0){ERR_MSG("close");return -1;}return 0;
}

四、报式域套接字

1.报式域套接字的编程与网络报式套接字编程思路是一致的,但是由于客户端不手动绑定的话,操作系统不会自动创建一个套接字文件给客户端绑定

2.此时若服务器想给客户端回复信息,会找不到客户端的地址信息。此时客户端是必须绑定的

1)UNIX UDP服务器

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <sys/un.h>#define ERR_MSG(msg)  do{\fprintf(stderr, "__%d__ ", __LINE__);\perror(msg);\
}while(0)int main(int argc, const char *argv[])
{//创建报式套接字int sfd = socket(AF_UNIX, SOCK_DGRAM, 0);if(sfd < 0){ERR_MSG("socket");return -1;                                                                      }printf("sfd = %d\n", sfd);//判断文件是否存在//若存在,则删除if(access("./unixSer", F_OK) == 0){unlink("./unixSer");}//填充服务器的地址信息结构体, AF_UNIX: man 7 unixstruct sockaddr_un sun;sun.sun_family      = AF_UNIX;strcpy(sun.sun_path, "./unixSer");//绑定服务器的地址信息if(bind(sfd, (struct sockaddr*)&sun, sizeof(sun)) < 0){ERR_MSG("bind");return -1;}printf("bind success\n");struct sockaddr_un cun;     //存储数据包是从谁哪里来的socklen_t addrlen = sizeof(cun);char buf[128] = "";while(1){bzero(buf, sizeof(buf));//接收数据//if(recvfrom(sfd, buf, sizeof(buf), 0, NULL, NULL) < 0)if(recvfrom(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&cun,  &addrlen) < 0){ERR_MSG("recvfrom");return -1;}printf("[%s] : %s\n", cun.sun_path, buf);//发送数据 --> 谁发给我,我发给谁strcat(buf, "*_*");if(sendto(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&cun, sizeof(cun)) < 0){ERR_MSG("sendto");return -1;}printf("sendto success\n");}//关闭套接字close(sfd);return 0;
}

2)UNIX UDP客户端

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <sys/un.h>#define ERR_MSG(msg)  do{\fprintf(stderr, "__%d__ ", __LINE__);\perror(msg);\
}while(0)int main(int argc, const char *argv[])
{if(argc < 2){printf("请输入套接字文件路径名\n");return -1;}//创建报式套接字int cfd = socket(AF_UNIX, SOCK_DGRAM, 0);if(cfd < 0){ERR_MSG("socket");return -1;}printf("cfd = %d\n", cfd);//绑定客户端的地址信息---》非必须绑定//如果客户端不手动绑定,则操作系统不会创建一个套接字文件给客户端自动绑定的。//若服务器要给当前客户端回复信息,则当前客户端必须要绑定//判断文件是否存在//若存在,则删除if(access(argv[1], F_OK) == 0){unlink(argv[1]);}//填充客户端的地址信息结构体,给bind函数使用 struct sockaddr_un cun;cun.sun_family      = AF_UNIX;strcpy(cun.sun_path, argv[1]);if(bind(cfd, (struct sockaddr*)&cun, sizeof(cun)) < 0){ERR_MSG("bind");return -1;}printf("客户端绑定成功\n");//填充服务器的地址信息结构体,给下面的sendto函数使用struct sockaddr_un sun;sun.sun_family      = AF_UNIX;strcpy(sun.sun_path, "./unixSer");struct sockaddr_un rcvaddr;     //存储数据包是从谁哪里来的socklen_t addrlen = sizeof(rcvaddr);char buf[128] = "";while(1){bzero(buf, sizeof(buf));//发送数据 --> 给服务器printf("请输入>>> ");fgets(buf, sizeof(buf), stdin);buf[strlen(buf)-1] = 0;if(sendto(cfd, buf, sizeof(buf), 0, (struct sockaddr*)&sun, sizeof(sun)) < 0){ERR_MSG("sendto");return -1;                                                                    }printf("sendto success\n");//接收数据if(recvfrom(cfd, buf, sizeof(buf), 0, (struct sockaddr*)&rcvaddr,  &addrlen) < 0){ERR_MSG("recvfrom");return -1;}printf("[%s] : %s\n", rcvaddr.sun_path, buf);}//关闭套接字close(cfd);return 0;
}
http://www.dt0577.cn/news/48832.html

相关文章:

  • 学校信息门户网站建设山东做网站
  • 大丰网站制作免费建立个人网站申请
  • 电子商务 独立网站制作优化措施最新回应
  • 石家庄做网站比较好的公司有哪些seo专员简历
  • 十大营销网站网络优化的内容包括哪些
  • 济南网站推广¥做下拉去118cr墨猴seo排名公司
  • 泰安最大的竞价排名公司360优化大师官方最新
  • 获取网站物理路径怎样创建网页
  • DMZ做网站成人职业技术培训学校
  • 自己做网站不如帮别人做运营成都推广系统
  • 公司装修设计工程无锡百度关键词优化
  • 公司网站建设找谁做免费培训课程
  • 构建一个网站需要多少钱班级优化大师免费下载电脑版
  • 购物网站补货提醒软件怎么做济南seo外贸网站建设
  • wordpress 特色图片 大小北京seo收费
  • 沈阳网站建设咨询电商网络推广是什么
  • 医院做网站需要多少钱公司网站
  • 运城市做网站seo外链发布工具
  • 成都专业网站建设云搜索引擎
  • 市场营销是学什么seo的流程是怎么样的
  • 网站登录如何做想要导航页面推广app
  • 可以做动漫网站的源码源码手机网站关键词快速排名
  • 做网站 包含详情页设计吗aso优化注意什么
  • wordpress 显示异常广东seo网站优化公司
  • 西安旅游攻略知乎广州seo网站排名
  • 品牌网络营销推广seo百度发包工具
  • 云浮新兴县做网站今日热榜官网
  • 网站收录怎么做厦门人才网唯一官网登录
  • 福建响应式网站制作网站seo优化免费
  • 一家专门做原型的网站2023年新闻摘抄十条