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

沧州网站制作公司wordpress最好的页面编辑器

沧州网站制作公司,wordpress最好的页面编辑器,建站素材,优秀包装设计案例TCP 连接的过程图 服务器 socket() 函数 socket() 返回的 sockfd 是一个描述符。socket()对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字#xff0c;而socket()用于创建一个socket描述符#xff08;socket descriptor#xff09;#xff0c;它唯一标识…TCP 连接的过程图 服务器 socket() 函数 socket() 返回的 sockfd 是一个描述符。socket()对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字而socket()用于创建一个socket描述符socket descriptor它唯一标识一个socket。这个socket描述字跟文件描述字一样后续的操作都有用到它把它作为参数通过它来进行一些读写操作。 int socket(int protofamily, int type, int protocol);//返回sockfdsocket()的三个参数分别为 protofamily即协议域又称为协议族family。常用的协议族有AF_INET(IPV4)、AF_INET6(IPV6)、AF_LOCAL (或称AF_UNIXUnix域socket、AF_ROUTE等等。协议族决定了socket的地址类型在通信中必须采用对应的地址如AF_INET决定了要用ipv4地址32位的与端口号16位的的组合、AF_UNIX决定了要用一个绝对路径名作为地址。type指定socket类型。常用的socket类型有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等socket的类型有哪些。protocol故名思意就是指定协议。常用的协议有IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。 调用socket()返回的socket描述字存在于协议族address familyAF_XXX空间中但没有一个具体的地址。如果想要给它赋值一个地址就必须调用bind()函数否则当调用connect()、listen()时系统会自动随机分配一个端口。 bind() bind()函数把一个地址族中的特定地址赋给socket()返回的socket。服务器一般是要主动绑定IP地址和端口号的但是客户端一般是不需要的因为客户端调用connect的时候内核会自动分配一个端口号给它。 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);bind()函数的三个参数分别为 sockfd即socket描述字它是通过socket()函数创建了唯一标识一个socket。bind()函数就是将给这个描述字绑定一个名字。addr一个const struct sockaddr *指针指向要绑定给sockfd的协议地址。这个地址结构根据地址创建socket时的地址协议族的不同而不同。addrlen对应的是addr的长度。 listen() 作为一个服务器在调用 socket()、bind() 之后就会调用listen()来监听这个socket如果客户端这时调用connect()发出连接请求服务器端就会接收到这个请求。 int listen(int sockfd, int backlog);listen() 的第一个参数即为要监听的socket描述字第二个参数为相应socket可以排队的最大连接个数。socket()函数创建的socket默认是一个主动类型的listen函数将socket变为被动类型的等待客户的连接请求。 调用该函数后socket会主动从连接套接字变为监听套接字。 accept() TCP服务器端依次调用socket()、bind()、listen()之后就会监听指定的socket地址了。TCP客户端依次调用socket()、connect()之后就向TCP服务器发送了一个连接请求。TCP服务器监听到这个请求之后就会调用accept()函数取接收请求这样连接就建立好了。之后就可以开始网络I/O操作了即类同于普通文件的读写I/O操作。 int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); //返回连接connect_fdaccept()函数的三个参数分别为 sockfdsockfd就是上面的监听套接字这个套接字用来监听一个端口当有一个客户与服务器连接时它使用这个端口号而此时这个端口号正与这个套接字关联。当然客户不知道套接字这些细节它只知道一个地址和一个端口号。addr这是一个结果参数它用来接受一个返回值这返回值指定客户端的地址当然这个地址是通过某个地址结构来描述的用户应该知道这一个什么样的地址结构。如果对客户的地址不感兴趣那么可以把这个值设置为NULL。addrlen它也是结果参数用来接受上述addr的结构的大小的它指明addr结构所占有的字节数大小。同样的它也可以被设置为NULL。 如果accept成功返回则服务器与客户已经正确建立连接了此时服务器通过accept返回的套接字来完成与客户的通信。 accept()默认会阻塞进程直到有一个客户连接建立后返回它返回的是一个最新可用的套接字这个套接字是连接套接字。 两种套接字 监听套接字: 监听套接字正如accept的参数sockfd它是监听套接字在调用listen函数之后是服务器调用socket()函数生成的套接字称为监听socket描述字(监听套接字) 连接套接字调用listen()后一个套接字会从主动连接的套接字变身为一个监听套接字而accept()返回的是已连接socket描述字(一个连接套接字)它代表着一个网络已经存在的点对点连接。 一个服务器通常只创建一个监听套接字它在该服务器的生命周期内一直存在。内核为每个由服务器进程接受的客户连接创建了一个连接套接字当服务器完成了对某个客户的服务相应的连接套接字就被关闭。 **自然要问的是为什么要有两种套接字**原因很简单如果使用一个描述字的话那么它的功能太多使得使用很不直观同时在内核确实产生了一个这样的新的描述字。 连接套接字socketfd_new 并没有占用新的端口与客户端通信依然使用的是与监听套接字socketfd一样的端口号。 read()、write()等 服务器与客户建立好连接后就可以调用网络I/O进行读写操作了网络I/O操作有下面几组 ssize_t send(int sockfd, const void *buf, size_t len, int flags); ssize_t recv(int sockfd, void *buf, size_t len, int flags); ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags); ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);read函数是负责从fd中读取内容.当读成功时read返回实际所读的字节数如果返回的值是0表示已经读到文件的结束了小于0表示出现了错误。如果错误为 EINTR 说明读是由中断引起的如果是 ECONNREST 表示网络连接出了问题。 write函数将buf中的nbytes字节内容写入文件描述符fd成功返回写入的字节数。失败时返回 -1并设置errno变量如果错误为 EINTR 表示在写的时候出现了中断错误。如果为 EPIPE 表示网络连接出现了问题。 close() 在服务器与客户端建立连接之后会进行一些读写操作完成了读写操作就要关闭相应的socket描述字好比操作完打开的文件要调用fclose关闭打开的文件。 int close(int fd);close一个 TCP socket 的行为是把该socket标记为已关闭然后立即返回到调用进程。该描述字不能再由调用进程使用也就是说不能再作为read或write的第一个参数。 注意close操作只是使相应socket描述字的引用计数-1只有当引用计数为0的时候才会触发TCP客户端向服务器发送终止连接请求。 客户端 socket() 客户端调用的socket()函数与服务器调用的socket()函数相同区别在于客户端不用调用bind()为socket()返回的socket绑定一个地址。 connect() 客户端调用 connect() 发出连接请求。调用 connect() 时由系统随机生成一个端口号和自身的ip地址组合并指定给socket。 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);connect函数的第一个参数即为客户端的socket描述字第二参数为服务器的socket地址第三个参数为socket地址的长度。客户端通过调用connect函数来建立与TCP服务器的连接。 read()、write()等 参见上文。 close()函数 参见上文。 建立TCP连接时各个系统调用的返回时机 从图中可以看出 当客户端调用connect时触发了连接请求向服务器发送了SYN J包这时 connect 进入阻塞状态服务器监听到连接请求即收到 SYN J 包调用accept函数接收请求向客户端发送 SYN K ACK J1这时 accept 进入阻塞状态客户端收到服务器的 SYN K ACK J1 之后这时 connect 返回并对SYN K进行确认服务器收到 ACK K1 时accept返回至此三次握手完毕连接建立。 将套接字设置为非阻塞 int x;xfcntl(sockfd,F_GETFL,0);fcntl(sockfd,F_SETFL,x | O_NONBLOCK);fcntl() 是对文件描述符进行操作的一个函数F_GETFL表示获取属性而F_SETFL表示设置属性。
http://www.zqtcl.cn/news/237170/

相关文章:

  • 满足seo需求的网站大型网站常见问题
  • 做网站要求高吗珠宝网站建设
  • 网站建设方案 预算高端制作网站哪家专业
  • 响应式网站什么意思长春做个人网站做不了
  • 手机网站排名优化软件网站登陆页面怎么做
  • 辽宁网站建设价格杭江建设有限公司
  • 成立公司在什么网站网络推广推广培训
  • 承德网站制作公司哪家好公司网络组建方案模板
  • 用wordpress 建网站网站关键词怎么改
  • 怎么做网站做站点创建站怎么上传网站怎么办
  • 十堰网站建设专家html做的旅游网站
  • 网站项目上线流程网站改版需求说明
  • 网站建设制作公司xshell如何做网站
  • 义乌个人兼职做建设网站琼海做网站公司
  • 什么网站可以直接做word在柬埔寨做网站彩票推广
  • 深圳市宝安区住房和建设局网站校园网络方案设计
  • 株洲建设网站制作seo快速软件
  • 建站什么程序好wordpress返佣
  • 网站建设使用虚拟主机的优点与缺点马蹄室内设计论坛
  • 像wordpress一样的网站wordpress提示数据库出错
  • 优化网站首页新项目首码对接平台
  • 一个完整的网站建设过程wordpress企业中文模板下载
  • 我做微信淘宝客网站有哪些在公司做网站是什么职位
  • 湖南网站建设公司 干净磐石网络网站开发技术可行性分析怎么写
  • 石家庄制作网站网络推广与优化
  • 建站平台免代码可以自己设计图案的软件
  • 中山网站开发公司事业单位 网站备案
  • wordpress 做用户登录seo快速推广窍门大公开
  • php网站开发试卷做外贸一般在哪个网站
  • 有哪些网站的搜索引擎网站设计需要需要用