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

非商业组织的网站风格公司网站建设与维护工作计划

非商业组织的网站风格,公司网站建设与维护工作计划,厚街找人做网站,wordpress 升级数据库本文介绍 UDP 服务端与客户端 的创建流程#xff0c;和相关的函数接口 核心流程 创建 socket → socket()填写服务器地址信息 → sockaddr_in 结构体绑定地址和端口 → bind()接收并响应客户端数据 → recvfrom() / sendto()socket() #includesys/so…本文介绍 UDP 服务端与客户端 的创建流程和相关的函数接口 核心流程 创建 socket → socket()填写服务器地址信息 → sockaddr_in 结构体绑定地址和端口 → bind()接收并响应客户端数据 → recvfrom() / sendto()socket() #includesys/socket.h int socket(int domain, int type, int protocol); 参数说明domain地址族协议族常见值→ AF_INETIPv4→ AF_INET6IPv6→ AF_UNIX本地通信进程间通信type套接字类型决定通信方式→ SOCK_STREAM面向连接TCP→ SOCK_DGRAM无连接UDPprotocol一般写 0表示让系统自动选择适合给定 domain 和 type 的协议使用示例 int sockfd socket(AF_INET, SOCK_DGRAM, 0); //成功返回文件描述符 //失败返回-1 if (sockfd 0) {std::cerr socket error std::endl; }sockaddr_in 他有4个成员赋值前三个即可 struct sockaddr_in {sa_family_t sin_family; // 地址族必须是 AF_INETuint16_t sin_port; // 端口号网络字节序struct in_addr sin_addr; // IP 地址char sin_zero[8]; // 填充字节保持与 sockaddr 一致 };在赋值时需要注意 端口号要转换为网络序列IP地址调用inet_addrserver.sin_port htons(serverport); // 主机序列转网络序列server.sin_addr.s_addr inet_addr(serverip.c_str()); // 转换4字节INADDR_ANY 服务器端的服务需要固定的端口 而IP地址给INADDR_ANY,表示监听任意IP地址即从哪个网卡发来哪个请求都可以处理 其实和手动给0或者0.0.0.0 作用相似 bind() 服务器端和客户端都需要将套接字和本地地址IPport绑定才能做到接收和转发消息 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 参数含义sockfd用 socket() 创建的套接字文件描述符addr本地地址结构体sockaddr* 类型实际通常传 sockaddr_in* 转换而来addrlen结构体 addr 的大小用 sizeof(sockaddr_in)使用示例 int n bind(_sockfd, (struct sockaddr *)addr, sizeof(addr)); //成功返回0,失败返回-1 if (n 0) {LOG(FATAL, bind error, %s, %d\n, strerror(errno), errno);exit(BIND_ERROR); }客户端的bind() 客户端也是需要绑定的不然如何发送消息呢。 但是不需要我们手动调用bind(), 在第一次发送请求的时候OS自动调用bind() 当你第一次调用 sendto()操作系统会自动调用 bind() 来1.分配一个临时的本地 IP通常是默认网卡的 IP2.分配一个 可用的随机端口称为 ephemeral portrecvfrom() recvfrom() 是 UDP 套接字编程中用来接收数据报的核心函数 它不仅接收数据还能告诉你数据是从哪个客户端发来的。 #includesys/socket.h #includesys/types.h ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen); 参数含义sockfd套接字文件描述符由 socket() 创建buf指向缓冲区的指针用来存放接收到的数据len缓冲区大小flags一般设置为 0特殊需求可用 MSG_PEEK窥视、MSG_WAITALL 等src_addr输出参数对方的地址结构体可获取对方 IP 和端口addrlen输入输出参数传入结构体长度返回时写入实际地址大小使用示例 struct sockaddr_in peer; socklen_t len sizeof(peer); char buffer[1024]; ssize_t n recvfrom(_sockfd, buffer, sizeof(buffer) - 1, 0, (struct sockaddr *)peer, len); //成功返回实际接收的字节数就是多少个英文字符 //失败返回-1 //peer存客户端的数据sendto() #includesys/socket.h #includesys/types.h ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);有区别的是len、det_addr参数含义sockfd套接字文件描述符由 socket() 创建buf要发送的数据缓冲区的指针len要发送的数据字节数flags通常为 0特殊用途可以设置为 MSG_CONFIRM 等dest_addr目标地址结构体例如 sockaddr_in需强转为 sockaddr*addrlendest_addr 的长度如 sizeof(sockaddr_in)使用示例 struct sockaddr_in peer; socklen_t len sizeof(peer); //客户端要持续运行所以给死循环 while (true) {char buffer[1024];ssize_t n recvfrom(_sockfd, buffer, sizeof(buffer) - 1, 0, (struct sockaddr *)peer, len);if (n 0){buffer[n] {0};InetAddr addr(peer); //自己写的类为了获取转换后的网络字节序和4字节序LOG(DEBUG, get message from [%s:%d]:%s\n, addr.Ip(), addr.Port(), buffer);sendto(_sockfd, buffer, strlen(buffer), 0, (struct sockaddr *)peer, len);} }小结 介绍了socket创建流程需要的接口以及在这方面服务器端和客户端的区别
http://www.pierceye.com/news/830888/

相关文章:

  • wordpress首页添加站点统计小工具住房城乡建设部门门户网站
  • 网站建设在哪块做创业园网站建设
  • 郑州搭建网站公司互联网公司网站建设的目的
  • 响应式视频网站什么是权重高的网站
  • 做教育网站挣钱我的网站域名是什么
  • django 网站开发实例哪里可以检测胎儿性别
  • 刷排名凡搜网站宝微信5000人接推广费用
  • 网站优化外包服务专业网站建设服务商
  • 江西企业网站建设费用wordpress正在执行例行维护_请一分钟后回来.
  • 苏宁推客如何做网站创建一个网站的步骤
  • 优化网站广告优化东莞美食网站建设报价
  • 单页网站的营销定制应用软件有哪些
  • 如何建立一个网站详细步骤品牌建设可以从哪方面入手
  • 杨浦做网站福州网站公司
  • 厦门网站建设工程汽车网站正在建设中模板
  • 关于网站规划建设方案书怎么制作官网
  • 网站域名注销流程昌邑微信网站建设公司
  • 如何做众筹网站wordpress手机投放广告
  • 贵阳制作网站的公司如何找友情链接
  • 苏州诶茵诶公司网站flash网站怎么制作
  • 域名申请网页制作网站建设珠海免费模板建站
  • 行情网免费网站大全wordpress 头像上传路径
  • 网站开发联系方式做网站如何提需求
  • 小程序定制团队seo顾问推推蛙
  • 徐州网站建设公司哪家好经典广告
  • 百度的官方网站wordpress提示插件安装
  • 网站的按钮怎么做 视频宁波网站建设用什么软件
  • 宜宾市做网站多少钱老板办公室装修效果图
  • 如何将网站挂载域名手机网站布局教程
  • 哪个网站可以做销售记录公司经营范围分类目录