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

iis网站在点默认文档的时候报错.网页链接调用服务是干嘛的

iis网站在点默认文档的时候报错.,网页链接调用服务是干嘛的,WordPress下拉下一页,重庆网站建设机构一、网络编程基础网络编程本身是一门很大的学问#xff0c;涉及到的东西也很多#xff0c;尤其是各种协议。先看图#xff1a;正如上图所示#xff0c;网络编程中包含五大层面(也有区分六个层面)#xff0c;从应用层到物理层可以明显看出 越往下越接近计算机硬件。自己并不…一、网络编程基础网络编程本身是一门很大的学问涉及到的东西也很多尤其是各种协议。先看图正如上图所示网络编程中包含五大层面(也有区分六个层面)从应用层到物理层可以明显看出 越往下越接近计算机硬件。自己并不是专业网络编程的工程师所以仅对这五大层面有一点点粗浅的了解这篇文章网络编程技巧博主写的比较详细. 平时大多数所谓网络编程其实是在传输层、网络层方面.二、socket编程首先socket(套接字)编程应该属于传输层主要实现的是端到端的通信非常类似于很久很久以前的固话通信应用程序可以通过它发送或者接受数据可以对它进行像文件似得读写、关闭等操作。套接字允许应用程序将I/O插入网络中并与网络中的其他应用程序进行通信。其次网络中两台或多台主机之间进行通信必须知道对应主机的地址也就是其IP地址但是只知道IP地址是远远不够的试想如你在本机A发送了一个消息另一个台主机B也接收到到了该消息但是到底是B主机的哪一个进程接受并处理该消息就像你用QQ给B发送消息但是B不可能通过陌陌收到该消息。 因此相互通信的主机之间还必须确定一一对应的消息处理接口--端口。端口的存在主要是为了确认消息一一对应性。另外端口号其实就是一个从0开始的到65535之间的一个整型数字0~1023端口也就是常说的静态端口已被操作系统另做它用(http,https,ftp等各种协议占用)我们自己所能使用的端口范围只能从1024开始即动态端口取值[1024,65535].可是看出若要进行网络间通信socket至少要包含IPport两个方面其实事实也是如此.还是以有线电话做为类比socket其实就是自己家中的一部电话其中IP就是家庭地址port就是自己家的电话号码当要给别人打电话时别人家当然也必须有自己的座机和专属于该座机的号码.或许我们也能猜出socket编程是网络编程里边必不可少且及其重要的一个环节.三、Linuxsocket实践1、目的熟悉Linux(这里用Ubuntu16.04版本其他版本类似)下socket编程基本流程掌握socket编程基本原理搞懂Linux下socket编程所必须的函数及其用法.实验在本地模拟两台机器服务器和客户端服务器监听客户端信息并能发送广播客户端可以主动给服务器发送消息,其中消息的输入是从标准输入设备输入并输出到标准输出--Linux 终端.开始之前必须了解一点 什么是文件描述符,在Unix Linux系统中文件描述符是一个非负整数其存在作用更像一个索引系统内核通过该索引找到对应的文件、设备、外设、安装的软件等等, 并通过描述符对它们进行操作。总而言之文件描述符对应了系统上的所有文件这里的文件并非传统意义上的普通文件,而是指Linux系统内核所能管理1的一切包含文档、文件、硬件设备、系统软件等等。这也体现了Linux系统的设计思想----把一切视作文件.2、必要接口1)、socket函数既然socket这么重要来看它到底是个什么东西.在Linux终端执行man socket,出现通过Linux手册查询可以知道该函数所必须的头文件函数声明和函数描述等信息.从[DESCRIPTION]字段可知函数创建了一个用于通信的端点并返回该端点的描述符若创建成功返回创建套接字的文件描述符否则返回一负数.函数声明 int socket(int domain,int type,int protocol);参数 domain:表示创建该socket所使用的通讯协议家族--地址族现在一般用IPv4协议所以通常会选择AF_INET;参数type指定所需的通信类型。包括数据流(SOCK_STREAM)TCP协议、数据报(SOCK-DGRAM)UDP协议和原始类型(S0CK_RAW)新网格协议的开发测试.参数protocol说明该套接字使用的协议族中的特定协议。如果不希望特别指定使用的协议则置为0使用默认的连接模式.若要进行 基于TCP IP的网络开发测试则函数创建方式一般为int listenfd socket(AF_INET,SOCK_STREAM,0);2)、bind函数既然有了一部“电话”那么就需要为该电话绑定唯一的“所属地址”同样Linux命令行执行man bind,同样函数声明为int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen);从手册的描述中可以看出当成功创建socket套接字后调用该函数可以将所创建的套接字(sockfd)和指定的地址(addr)绑定.地址是由这样一个结构体指定:struct sockaddr {sa_family_t sa_family; //地址族char sa_data[14]; //14字节的协议地址}上面struct sockaddr是通用地址在网络编程中 internet sockaddr使用下面地址两种地址可以互换struct sockaddr_in {short int sin_family; /* 地址族AF_xxx 在socket编程中只能是AF_INET */unsigned short int sin_port; /* 端口号 (使用网络字节顺序) */struct in_addr sin_addr; /* 存储IP地址 4字节 */unsigned char sin_zero[8]; /* 总共8个字节实际上没有什么用只是为了和struct sockaddr保持一样的长度 */};bind()函数的第三个参数表示地址所占字节长度socklen_t本质上是一个 unsigned int宏定义.可以通过这样方式指定地址:struct sockaddr_in serveraddr;memset(serveraddr,0,sizeof(serveraddr));serveraddr.sin_family AF_INET;serveraddr.sin_port htons(5188);serveraddr.sin_addr.s_addr htonl(INADDR_ANY);//serveraddr.sin_addr.s_addr inet_addr(127.0.0.1);首先声明网络接口地址结构在给该地址赋值前必须将其清空.依次设置该地址的地址族、IP和端口(这里随便设置了一个)上边出现另一个新函数htons,同样终端下man htons,可知该函数的主要作用是将主机字节序转化为网络字节序关于这两个字节序后续再深入研究.这里可以理解为htons()的主要作用就是将十进制的ip地址和端口号转化为网络可以识别的东东.至此基本可以完成座机的安装入户和号码绑定bing(listenfd,(struct sockaddr *)serveraddr,sizeof(serveraddr));3)、listen监听函数对于我们的服务器而言它需要监听来自客户端发来的消息Linix终端中 man listen可以看到详细信息. 函数声明为int listen(int socdfd,int backlog);其中参数sockfd代指所要监听的套接字文件描述符参数backlog表示在套接字挂起时所能接受请求的最大队列长度.函数执行成功返回 0否则返回 -1.必须说明一点当调用该函数后参数socdfd所指定的套接字将变为被动套接字,所谓被动套接字是指其只能用来接收来自其他用户的链接请求. 类似于改变了套接字的状态使其只能用于接收.4)、accept 接收函数对于我们的服务器而言由于其只具备接收功能因此必须创建一个接受函数:int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);函数参数不言自明参数1sockfd表示服务器socket描述符参数2是指客户端的协议地址参数3为地址长度. 函数成功返回监听的等待队列中第一个套接字的描述符.3、服务器实现服务器的功能是监听客户端发来的消息并将消息广播给客户端.因此需要一个循环实时监听客户端发来的消息在本地构建一个简单的服务器如下#include #include #include #include #include #include #include #include #include #include #include #define ERR_EXIT(m) \do \{ \perror(m);\exit(EXIT_FAILURE);\}while(0)int main(void){int listenfd;if(( listenfd socket(PF_INET,SOCK_STREAM,0)) 0){ERR_EXIT(socket);}struct sockaddr_in serveraddr;memset(serveraddr,0,sizeof(serveraddr));serveraddr.sin_family AF_INET;serveraddr.sin_port htons(5188);serveraddr.sin_addr.s_addr htonl(INADDR_ANY);//serveraddr.sin_addr.s_addr inet_addr(127.0.0.1);if(bind(listenfd,(struct sockaddr*)serveraddr,sizeof(serveraddr))0)ERR_EXIT(bind);//一旦监听则为被动套接字(只能接受连接调用accep函数之前调用)这里随便给了一个最大队列长度if(listen(listenfd,100) 0)ERR_EXIT(listen);//声明一个地址用于存储客户端链接时的协议地址struct sockaddr_in peeraddr;socklen_t peerlen sizeof(peeraddr);int conn; //返回的一个主动套接字if((conn accept(listenfd,(struct sockaddr*)peeraddr,peerlen))0)ERR_EXIT(accept);char recvbuff[1024];while(1){memset(recvbuff,0,sizeof(recvbuff));int ret read(conn,recvbuff,sizeof(recvbuff));fputs(recvbuff,stdout);write(conn,recvbuff,ret);}close(listenfd);return 0;}其中用到了几个非socket API的函数ssize_t read(int fd,void *buf,size_t count);ssize_t write(int fd, const void *buf, size_t count);read()函数负责从fd所指定文件描述符读取字节大小为count的数据到buf中.若成功返回实际读取到的字节大小,否则返回负数,返回0表示读取到文件结束.write():将buf中的count个字节内容写入文件描述符fd.成功时返回写的字节数.4、客户端实现客户端的实现和服务器的实现之间大同小异同样都需要 ” 安装电话 “ 但是客户端的功能仅在于向外”拨打电话“. 区别在于客户端是主动发起连接请求,所以它必须知道自己所要连接的目标之后服务器才有响应.同样客户端并不需要监听只需要接收到服务器的广播即可. 发起连接请求需要函数 connectint connect(int sockfd,const struct sockaddr *addr,socklen_t addrlen);在上述连接函数中参数sockfd表示本机(客户端)的socket套接字描述符参数addr表示服务器端的地址参数3表示地址长度.代码实现#include #include #include #include #include #include #include #include #include #include #include #define ERR_EXIT(m) \do \{ \perror(m);\exit(EXIT_FAILURE);\}while(0)int main(void){int sock;if(( sock socket(PF_INET,SOCK_STREAM,0)) 0){ERR_EXIT(socket);}struct sockaddr_in serveraddr;memset(serveraddr,0,sizeof(serveraddr));serveraddr.sin_family AF_INET;serveraddr.sin_port htons(5188);// serveraddr.sin_addr.s_addr htonl(INADDR_ANY);serveraddr.sin_addr.s_addr inet_addr(127.0.0.1);//发起连接connect(sock,(struct sockadddr*)serveraddr,sizeof(serveraddr));char recvbuf[1024]{0};char sendbuf[1024]{0};while(fgets(sendbuf,sizeof(sendbuf),stdin)! NULL){write(sock,sendbuf,strlen(sendbuf));read(sock,recvbuf,sizeof(recvbuf));fputs(recvbuf,stdout);memset(recvbuf,0,sizeof(recvbuf));}close(sock);return 0;}上述函数功能就是从客户端主动向服务器发送连接请求并在客户端机器的标准设备上如字符服务器接受并返回. 实现两台机器通信的模拟.5、结果效果如下图用gcc编译上述两个文件首先启动服务器之后启动客户端.在客户端随便输入字符服务器解收到并广播返回. 至此基本完成目的.三、总结目前来看创建服务器的一般流程是1.创建socket套接字(socket函数)2.创建服务器地址地址包含协议族、IP和端口号(const struct sockaddr*)3.绑定套接字和服务器地址(bind函数);4.系统监听服务器,一旦监听则该套接字变为被动套接字只能用于接收数据(listen函数)5.作为服务器应该能接收客户端信息(accept函数),该函数返回一个主动套接字基于以上步骤基本能搭建一个简单的服务器.客户端的搭建相比而言简单许多1.创建用于连接的套接字2.将套接字和服务器地址连接3.发送消息网络编程毕竟浪大水深毕竟初涉慢慢填充.
http://www.zqtcl.cn/news/250221/

相关文章:

  • 网站上的分享手机网站免费建设平台
  • 有哪个网站专业做漫画素材的wordpress显示问题
  • 网站开发工程师月薪网站网页设计培训机构
  • 专业网站运营备案名称网站名称
  • 盐城市建设局网站企业网站建设流程与方法 论文
  • 青岛信息推广网站营销自己的网站
  • wp博客 婚庆网站模板摄影网页面制作
  • 大型商城网站建设学计算机前端好就业吗
  • 杭州 电子商务网站建设专门做酒店自助餐的网站
  • 如何备份网站数据库网站用户体验模型
  • 网站域名注册流程办公室装修风格
  • a站免费最好看的电影片推荐方正隶变简体可以做网站用么
  • 创同盟做网站找公司做网站需要咨询什么问题
  • 西安行业网站株洲高端网站建设
  • 优化网站流量商城网站建设软件
  • dw属于什么的网页制作工具网络建站优化科技
  • 百度网站首页的设计理念南京高新区规划建设局网站
  • 虚拟机做实验的网站网站以个人名义备案
  • 自定义表单网站网站建设营销型号的区别
  • 有个网站做彩盒的贵阳网站建设托管
  • 网站制作属于什么专业做网站需要什么配置服务器吗
  • 网站开发学习培训广州网站优化关键词公司
  • 毕节金海湖新区城乡建设局网站企业网站的步骤
  • 网站后台设计教程网站建设判断题
  • 珠海网站建设 金蝶天元建设集团有限公司李华
  • 海安市建设局网站成都官网seo技术
  • 网站建设策划书结束语wordpress付费版
  • 进口网站建设做网站用什么格式的图片
  • 青海省住房和城乡建设部网站进入网站空间
  • 做公司简介的开源网站企业seo多少费用