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

一级网站建设松北建设局网站

一级网站建设,松北建设局网站,WordPress不收录首页,汅app下载大全2022Linux下#xff0c;基于TCP与UDP协议#xff0c;不同进程下单线程通信服务器 Linux下#xff0c;基于TCP与UDP协议#xff0c;不同进程下单线程通信服务器 六十五、TCP与UDP的基础模型 1. socket 1.1 套接字概念 最早的套接字和共享内存#xff0c;消息队列#xff…Linux下基于TCP与UDP协议不同进程下单线程通信服务器 Linux下基于TCP与UDP协议不同进程下单线程通信服务器 六十五、TCP与UDP的基础模型 1. socket 1.1 套接字概念 最早的套接字和共享内存消息队列管道一样只能实现一个主机内部的进程间通信。后期加入了TCP/IP协议使的套接字能够支持不同主机之间的进程间通信。socket函数可以在内核空间中创建两块缓冲区供于发送数据接收数据。 1.2 socket 函数 功能在内核空间中创建两个缓冲区发送缓冲区接收缓冲区返回该缓冲区的文件描述符到用户空间中; 原型#include sys/types.h /* See NOTES */#include sys/socket.hint socket(int domain, int type, int protocol); 参数int domain地址族协议族。Name Purpose Man pageAF_UNIX, AF_LOCAL Local communication unix(7)AF_INET IPv4 Internet protocols ip(7)AF_INET6 IPv6 Internet protocols ipv6(7)int type SOCK_STREAM字节流式套接字流式套接字默认使用TCP协议;SOCK_DGRAM: 数据报式套接字报式套接字默认使用UDP协议;SOCK_RAW: 原始套接字协议需要在第三个参数手动指定.int protocol默认协议填0IPPROTO_TCP IPPROTO_UDP IPPROTO_IP 返回值成功返回一个新的文件描述符;失败返回-1更新errno;2. TCP编程 2.1 TCP流程图 2.2 TCP 中的函数 2.2.1 socket 功能在内核空间中创建两个缓冲区发送缓冲区接收缓冲区返回该缓冲区的文件描述符到用户空间中; 原型#include sys/types.h /* See NOTES */#include sys/socket.hint socket(int domain, int type, int protocol); 参数int domain地址族协议族。Name Purpose Man pageAF_UNIX, AF_LOCAL Local communication unix(7)AF_INET IPv4 Internet protocols ip(7)AF_INET6 IPv6 Internet protocols ipv6(7)int type SOCK_STREAM字节流式套接字流式套接字默认使用TCP协议;SOCK_DGRAM: 数据报式套接字报式套接字默认使用UDP协议;SOCK_RAW: 原始套接字协议需要在第三个参数手动指定.int protocol默认协议填0IPPROTO_TCP IPPROTO_UDP IPPROTO_IP 返回值成功返回一个新的文件描述符;失败返回-1更新errno;2.2.2 bind 功能绑定地址信息到指定套接字上; 原型#include sys/types.h /* See NOTES */#include sys/socket.hint bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen); 参数int sockfd指定要绑定到哪个套接字上填对应的文件描述符;struct sockaddr *addr通用地址信息结构体真实的地址信息结构体根据地址族指定。手动填充上地址信息例如IP和端口给bind函数绑定使用;AF_INET: man 7 IPstruct sockaddr_in {sa_family_t sin_family; /* address family: AF_INET */ 必须填AF_INETin_port_t sin_port; /* port in network byte order */ 端口号的网络字节序1024~49151struct in_addr sin_addr; /* internet address */ IP地址的网络字节序本机IP:ifconfig查看 };/* Internet address. */struct in_addr {uint32_t s_addr; /* address in network byte order */};AF_INET6: man 7 ipv6 socklen_t addrlen真实的地址信息结构体的大小sizeof(struct sockaddr_in); 返回值成功返回0;失败返回-1更新errno;报错解释bind: Address already in use ----原因代码异常退出后端口号会在30s~3min不等的时间释放。 2.2.3 listen 功能将套接字设置为被动监听状态让内核去维护两个队列未完成连接的队列已完成连接的队列 原型#include sys/types.h /* See NOTES */#include sys/socket.hint listen(int sockfd, int backlog); 参数int sockfd指定要转换成被动监听状态的文件描述符;int backlog指定未完成连接队列的容量不要填0和1即可一般填128; 返回值成功返回0;失败返回-1更新errno;2.2.4 accept阻塞函数 功能阻塞函数阻塞等待客户端连接成功从已完成连接的队列中获取一个客户端信息生成一个新的文件描述符。该文件描述符才是与客户端通信的文件描述符; 原型#include sys/types.h /* See NOTES */#include sys/socket.hint accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); 参数int sockfd被转换成被动监听状态的文件描述符;struct sockaddr *addr通用地址信息结构体真实的地址信息结构体根据地址族指定。存储获取到的客户端的地址信息若不想获取则填NULL;AF_INET: man 7 IPstruct sockaddr_in {sa_family_t sin_family; /* address family: AF_INET */ 必须填AF_INETin_port_t sin_port; /* port in network byte order */ 端口号的网络字节序1024~49151struct in_addr sin_addr; /* internet address */ IP地址的网络字节序本机IP:ifconfig查看 };/* Internet address. */struct in_addr {uint32_t s_addr; /* address in network byte order */}; socklen_t *addrlen真实的地址信息结构体的大小注意是指针类型若第二个参数填NULL则该参数也填NULL; 返回值成功返回新的通信套接字文件描述符; 该文件描述符才是与客户端通信的文件描述符;失败返回-1更新errno;2.2.5 recv 功能接收数据; 原型#include sys/types.h#include sys/socket.hssize_t recv(int sockfd, void *buf, size_t len, int flags); 参数int sockfd指定从哪个套接字维护的缓冲区中读取数据;void *buf存储接收到的数据void*:可以接收任意类型数据;size_t len指定要接收多少个字节的数据;int flags0阻塞方式当缓冲区中没有数据的时候该函数阻塞; 若flags0, 则recv函数等价于read函数;MSG_DONTWAIT非阻塞方式当当缓冲区中没有数据的时候该函数不阻塞;且函数运行失败; 返回值0, 成功读取到的字节数;0在流失套接字中若对端关闭则返回0;-1, 函数运行失败更新errno;recv(sockfd, buf, len, flags);等价于 recvfrom(sockfd, buf, len, flags, NULL, NULL);recv函数能否替换成其他函数 可以当recv函数最后一个参数填0可以替换成read函数 当recvfrom后面两个参数填NULL的时候等价于recv函数所以可以替换成recvfrom 2.2.6 send 功能发送数据; 原型#include sys/types.h#include sys/socket.hssize_t send(int sockfd, const void *buf, size_t len, int flags); 参数int sockfd指定向哪个套接字维护的缓冲区中写入数据;void *buf指定要发送的数据的首地址void*:可以发送任意类型数据;size_t len指定要发送多少个字节的数据;int flags0阻塞方式当缓冲区中满的时候该函数阻塞; 若flags0, 则send函数等价于write函数;MSG_DONTWAIT非阻塞方式当缓冲区中满的时候该函数不阻塞;且函数运行失败; 返回值0, 成功发送的字节数;-1,函数运行失败更新errno;send(sockfd, buf, len, flags);等价于 sendto(sockfd, buf, len, flags, NULL, 0);send函数能否替换成其他函数 可以当send函数最后一个参数填0可以替换成write函数 当sendto后面两个参数填NULL, 0 的时候等价于send函数所以可以替换成sendto 2.2.7 connect 功能连接服务器 原型#include sys/types.h /* See NOTES */#include sys/socket.hint connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 参数int sockfd指定要通过哪个文件描述符连接服务器;struct sockaddr *addr通用地址信息结构体真实的地址信息结构体根据地址族指定。手动填充上服务器的地址信息例如IP和端口给connect函数绑定使用; 想要连接哪个服务器就填哪个服务器的地址信息AF_INET: man 7 IPstruct sockaddr_in {sa_family_t sin_family; /* address family: AF_INET */ 必须填AF_INETin_port_t sin_port; /* port in network byte order */ 端口号的网络字节序1024~49151struct in_addr sin_addr; /* internet address */ IP地址的网络字节序本机IP:ifconfig查看 };/* Internet address. */struct in_addr {uint32_t s_addr; /* address in network byte order */};socklen_t addrlen真实的地址信息结构体的大小sizeof(struct sockaddr_in); 返回值成功返回0;失败返回-1更新errno;3. UDP编程 3.1 UDP流程图 3.2 UDP搭建 3.2.1 socket 功能在内核空间中创建两个缓冲区发送缓冲区接收缓冲区返回该缓冲区的文件描述符到用户空间中; 原型#include sys/types.h /* See NOTES */#include sys/socket.hint socket(int domain, int type, int protocol); 参数int domain地址族协议族。Name Purpose Man pageAF_UNIX, AF_LOCAL Local communication unix(7)AF_INET IPv4 Internet protocols ip(7)AF_INET6 IPv6 Internet protocols ipv6(7)int type SOCK_STREAM字节流式套接字流式套接字默认使用TCP协议;SOCK_DGRAM: 数据报式套接字报式套接字默认使用UDP协议;SOCK_RAW: 原始套接字协议需要在第三个参数手动指定.int protocol默认协议填0IPPROTO_TCP IPPROTO_UDP IPPROTO_IP 返回值成功返回一个新的文件描述符;失败返回-1更新errno;3.2.2 bind 功能绑定地址信息到指定套接字上; 原型#include sys/types.h /* See NOTES */#include sys/socket.hint bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen); 参数int sockfd指定要绑定到哪个套接字上填对应的文件描述符;struct sockaddr *addr通用地址信息结构体真实的地址信息结构体根据地址族指定。手动填充上地址信息例如IP和端口给bind函数绑定使用;AF_INET: man 7 IPstruct sockaddr_in {sa_family_t sin_family; /* address family: AF_INET */ 必须填AF_INETin_port_t sin_port; /* port in network byte order */ 端口号的网络字节序1024~49151struct in_addr sin_addr; /* internet address */ IP地址的网络字节序本机IP:ifconfig查看 };/* Internet address. */struct in_addr {uint32_t s_addr; /* address in network byte order */};AF_INET6: man 7 ipv6 socklen_t addrlen真实的地址信息结构体的大小sizeof(struct sockaddr_in); 返回值成功返回0;失败返回-1更新errno;3.2.3 recvfrom 功能接收数据的同时可以获取到该数据包从哪里来即可以知道发送方的地址信息; 原型#include sys/types.h#include sys/socket.hssize_t recv(int sockfd, void *buf, size_t len, int flags);ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen); 参数int sockfd指定从哪个套接字维护的缓冲区中读取数据;void *buf存储接收到的数据void*:可以接收任意类型数据;size_t len指定要接收多少个字节的数据;int flags0阻塞方式当缓冲区中没有数据的时候该函数阻塞; 若flags0, 则recv函数等价于read函数;MSG_DONTWAIT非阻塞方式当当缓冲区中没有数据的时候该函数不阻塞;且函数运行失败;struct sockaddr *src_addr通用地址信息结构体真实的地址信息结构体根据地址族指定。用于存储发送方的地址信息的即用于存储这个包是从谁那里发送过来的。若不想接收则填NULL;AF_INET: man 7 IPstruct sockaddr_in {sa_family_t sin_family; /* address family: AF_INET */ 必须填AF_INETin_port_t sin_port; /* port in network byte order */ 端口号的网络字节序1024~49151struct in_addr sin_addr; /* internet address */ IP地址的网络字节序本机IP:ifconfig查看 };/* Internet address. */struct in_addr {uint32_t s_addr; /* address in network byte order */}; socklen_t *addrlen真实的地址信息结构体的大小注意是指针类型若第二个参数填NULL则该参数也填NULL; 返回值0, 成功读取到的字节数;0但是只有在流失套接字中若对端关闭则返回0;-1, 函数运行失败更新errno;recv(sockfd, buf, len, flags); 等价于 recvfrom(sockfd, buf, len, flags, NULL, NULL); 3.2.4 sendto 功能发送数据给指定该数据包应该发给谁即指定接收方的地址必须指定清楚这个包该发给谁 原型#include sys/types.h#include sys/socket.hssize_t send(int sockfd, const 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); 参数int sockfd指定向哪个套接字维护的缓冲区中写入数据;void *buf指定要发送的数据的首地址void*:可以发送任意类型数据;size_t len指定要发送多少个字节的数据;int flags0阻塞方式当缓冲区中满的时候该函数阻塞; 若flags0, 则send函数等价于write函数;MSG_DONTWAIT非阻塞方式当缓冲区中满的时候该函数不阻塞;且函数运行失败; struct sockaddr *src_addr通用地址信息结构体真实的地址信息结构体根据地址族指定。指定该数据包应该发给谁即指定接收方的地址信息想发给谁填谁的地址信息;AF_INET: man 7 IPstruct sockaddr_in {sa_family_t sin_family; /* address family: AF_INET */ 必须填AF_INETin_port_t sin_port; /* port in network byte order */ 端口号的网络字节序1024~49151struct in_addr sin_addr; /* internet address */ IP地址的网络字节序本机IP:ifconfig查看 };/* Internet address. */struct in_addr {uint32_t s_addr; /* address in network byte order */}; socklen_t addrlen真实的地址信息结构体的大小; 返回值0, 成功发送的字节数;-1,函数运行失败更新errno; send(sockfd, buf, len, flags); 等价于 sendto(sockfd, buf, len, flags, NULL, 0); 网络调试工具— —飞机的用法 注意 关闭计算机的杀毒软件电脑管家防火墙
http://www.pierceye.com/news/220736/

相关文章:

  • 个人网站的域名注册怎么做手机app软件开发
  • 卡盟网站开发google play三件套
  • 缠绕机东莞网站建设技术支持在线协同办公软件
  • 邵阳做网站哪个公司好接推广网站
  • 媒体网站模版网站添加提醒
  • 平度网站建设公司电话制作动画网站模板
  • 教育手机网站开发郑州网站修改建设
  • 查询网站入口长春网站排名推广
  • 中国建设工程造价网站丰润网站建设
  • 电子项目外包网站可以发描文本的网站
  • 论文中引用网站中wordpress外汇行情
  • 宁城网站建设磁力宝
  • 找人做彩票网站多少钱茶叶网站flash模板
  • 海口制作网站企业深圳网站建设seo推广优化
  • 东莞建设质监网站建设网站方式有哪些
  • 中学网站建设书最好的网站设计开发公司
  • 下载网站源码聊城seo培训
  • 专用于做网站公司推广的方式有哪些
  • 网站如何规划c 手机网站开发模板
  • 哈尔滨网站建设优化公司室内设计网站
  • 厚街做网站的公司wordpress出现百度抓取404页面
  • 四川南充网站建设西安网站建设推广优化
  • 做企业门户网站都连连电商网站开发公司
  • 微商城网站建设价位公司要想做个网站这么弄
  • wordpress文章所属栏目关键词排名优化易下拉教程
  • 网站主题咋做免费网页模板素材网站
  • 网站建设对旅游意义公众号运营策划
  • 成都专业网站制作关于论文网站开发参考文献
  • 免费做代理郑州seo招聘
  • 做网站系统更新后wordpress