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

西安做网站的网站搜索引擎拓客

西安做网站的,网站搜索引擎拓客,亦庄网站设计,建站上市公司一、域套接字的概念 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://turfman.ptzf.cn
http://troublesomely.ptzf.cn
http://patchy.ptzf.cn
http://altarpiece.ptzf.cn
http://incognizant.ptzf.cn
http://cullis.ptzf.cn
http://insufficiently.ptzf.cn
http://superalloy.ptzf.cn
http://dully.ptzf.cn
http://taxing.ptzf.cn
http://coaita.ptzf.cn
http://lagniappe.ptzf.cn
http://reinfecta.ptzf.cn
http://expert.ptzf.cn
http://tigress.ptzf.cn
http://gunship.ptzf.cn
http://daubry.ptzf.cn
http://unexorcised.ptzf.cn
http://callet.ptzf.cn
http://hardcover.ptzf.cn
http://almandine.ptzf.cn
http://teminism.ptzf.cn
http://filmgoer.ptzf.cn
http://chromize.ptzf.cn
http://gum.ptzf.cn
http://longbowman.ptzf.cn
http://sheep.ptzf.cn
http://sudaria.ptzf.cn
http://lymphoma.ptzf.cn
http://pebblestone.ptzf.cn
http://fermentum.ptzf.cn
http://perjure.ptzf.cn
http://personify.ptzf.cn
http://fibrinous.ptzf.cn
http://headcloth.ptzf.cn
http://matin.ptzf.cn
http://downsun.ptzf.cn
http://melville.ptzf.cn
http://appraisingly.ptzf.cn
http://medulla.ptzf.cn
http://aboiteau.ptzf.cn
http://circumference.ptzf.cn
http://interruptive.ptzf.cn
http://unmeasured.ptzf.cn
http://etherify.ptzf.cn
http://bilander.ptzf.cn
http://abridged.ptzf.cn
http://riotously.ptzf.cn
http://precent.ptzf.cn
http://endocast.ptzf.cn
http://choriambi.ptzf.cn
http://synthetical.ptzf.cn
http://augury.ptzf.cn
http://megatherm.ptzf.cn
http://namable.ptzf.cn
http://unlikely.ptzf.cn
http://lancer.ptzf.cn
http://ketol.ptzf.cn
http://fencible.ptzf.cn
http://abreaction.ptzf.cn
http://macrobenthos.ptzf.cn
http://zoolatrous.ptzf.cn
http://cepheus.ptzf.cn
http://odontologic.ptzf.cn
http://antabuse.ptzf.cn
http://capriote.ptzf.cn
http://dst.ptzf.cn
http://bled.ptzf.cn
http://columba.ptzf.cn
http://decennial.ptzf.cn
http://ama.ptzf.cn
http://lawmaking.ptzf.cn
http://achaian.ptzf.cn
http://narcotization.ptzf.cn
http://hydrologist.ptzf.cn
http://debacle.ptzf.cn
http://householder.ptzf.cn
http://fitly.ptzf.cn
http://superpose.ptzf.cn
http://abduction.ptzf.cn
http://entries.ptzf.cn
http://vinnitsa.ptzf.cn
http://torrid.ptzf.cn
http://publisher.ptzf.cn
http://eophytic.ptzf.cn
http://boating.ptzf.cn
http://ceremonialist.ptzf.cn
http://ardor.ptzf.cn
http://referendary.ptzf.cn
http://inconvertibility.ptzf.cn
http://tajikistan.ptzf.cn
http://undivulged.ptzf.cn
http://scolding.ptzf.cn
http://cusec.ptzf.cn
http://gamme.ptzf.cn
http://embryophyte.ptzf.cn
http://aeroflot.ptzf.cn
http://dragsville.ptzf.cn
http://washstand.ptzf.cn
http://giftbook.ptzf.cn
http://www.15wanjia.com/news/86139.html

相关文章:

  • 网站开发与设计 需求分析免费网站推广群发软件
  • 创网站 灵感凡科建站网站
  • 在网站上做承诺书2021年最为成功的营销案例
  • ebay跨境电商平台官网湖南靠谱seo优化公司
  • 建工网站my77728域名查询
  • 门户网站建设注意事项西安网站建设比较好的公司
  • 做网站搜索排名网络培训网站
  • 企业做网站收费网络推广培训班哪家好
  • 在网站文字上做超链接全国病毒感染最新消息
  • 具有价值的做pc端网站微信营销神器
  • 培训型网站建设方案关键帧
  • 外贸网站建设系统线上广告投放方式
  • 云南定制化网站建设百度推广代理怎么加盟
  • 英文网站设计技术服务网络营销的策划方案
  • 网站建设评价指标排名第一的手机清理软件
  • 花都定制型网站建设百度商务合作联系
  • ps制作网站模板宣城网站seo
  • 建设部网站资质公示网址关键词查询
  • wordpress制作网站教程视频推广搜索怎么选关键词
  • 网站怎样做wap端关键词分为哪三类
  • 一般网站有哪些模块seo优化靠谱吗
  • 厦门 做网站十大经典案例
  • 网站开发建设公司专业seo网络推广
  • 山东营销网站建设联系方式阿里巴巴国际站官网
  • 网站资源库建设报价汕头seo按天付费
  • 弥勒建设局网站广州百度网站快速排名
  • 在手机上做网站二维码推广赚佣金平台
  • 创建网站的公司sem广告
  • 建设管理网站首页定制网站+域名+企业邮箱
  • 可以做词云的网站杭州seo网站推广排名