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

盘锦做网站价格个人网站建设在哪里

盘锦做网站价格,个人网站建设在哪里,关于网站建设培训,公众号做视频网站吗C Enet通信封装 接口封装使用举例 Enet底层封装的是UDP通信#xff0c;本文介绍了enet如何实现可靠udp传输的代码封装 接口封装 1)User_Enet_Listen监听端口函数 int User_Enet_Listen(const char *ip, int port, ENetHost **host) { ENetAddress address; if(!strcmp(i… C Enet通信封装 接口封装使用举例 Enet底层封装的是UDP通信本文介绍了enet如何实现可靠udp传输的代码封装 接口封装 1)User_Enet_Listen监听端口函数 int User_Enet_Listen(const char *ip, int port, ENetHost **host) { ENetAddress address; if(!strcmp(ip, *))ip 0.0.0.0;if(enet_address_set_host_ip(address, ip)){fprintf(stderr, enet_address_set_host_ip %s fail, ip);return -1;}address.port port;assert(host);*host enet_host_create(address, 1, 1, 0, 0);if(NULL*host){fprintf(stderr, enet_host_create %s:%d fail, address.host, address.port);return -1;}int size 1024*1024*1024;if(enet_socket_set_option((*host)-socket, ENET_SOCKOPT_RCVBUF, size)){fprintf(stderr, enet set server socket rcvbuf %d bytes fail, size);}return 0; }2)User_Enet_Accept接受链接函数 int User_Enet_Accept(ENetHost *host, unsigned int timeout, ENetPeer **peer) {int ret;ENetEvent event;ret enet_host_service(host, event, timeout);if(ret 0){ if(event.type ! ENET_EVENT_TYPE_CONNECT){if(event.type ENET_EVENT_TYPE_RECEIVE)enet_packet_destroy(event.packet);fprintf(stderr, enet_host_service event type %d is not connect, event.type);return -1;} assert(peer);*peer event.peer; }else if(0ret){fprintf(stderr, enet_host_service timeout %d, timeout);return -1; }else{fprintf(stderr, enet_host_service fail);return -1;}return 0; }3)User_Enet_Connect建立连接函数 int User_Enet_Connect(const char *srv_ip, int srv_port, unsigned int conn_timeout, unsigned int rw_timeout, ENetHost **host, ENetPeer **peer) { assert(host);*host enet_host_create(NULL, 1, 1, 0, 0);if(NULL*host){fprintf(stderr, enet_host_create fail);goto fail;}if(enet_socket_set_option((*host)-socket, ENET_SOCKOPT_RCVBUF, 1024*1024*1024)){fprintf(stderr, enet set server socket rcvbuf 1M bytes fail);}ENetAddress srv_addr;if(enet_address_set_host_ip(srv_addr, srv_ip)){fprintf(stderr, enet_address_set_host_ip %s fail, srv_ip);goto fail;}srv_addr.port srv_port;assert(peer);*peer enet_host_connect(*host, srv_addr, 1, 0); if(*peerNULL){fprintf(stderr, enet_host_connect %s:%d fail, srv_ip, srv_port);goto fail;}enet_peer_timeout(*peer, 0, rw_timeout, rw_timeout);int cnt 0;ENetEvent event;while(1){ret enet_host_service(*host, event, 1);if(ret 0){ if(cnt conn_timeout){ fprintf(stderr, enet_host_service timeout %d, conn_timeout);goto fail;}}else if(ret 0){if(event.type ! ENET_EVENT_TYPE_CONNECT){ fprintf(stderr, enet_host_service event type %d is not connect, event.type);goto fail;}break; //connect successfully}else{fprintf(stderr, enet_host_service fail); goto fail;}}#ifdef _DEBUGchar local_ip[16], foreign_ip[16];ENetAddress local_addr;enet_socket_get_address((*host)-socket, local_addr);enet_address_get_host_ip(local_addr, local_ip, sizeof(local_ip));enet_address_get_host_ip((*peer)-address, foreign_ip, sizeof(foreign_ip));printf(%s:%d connected to %s:%d, local_ip, loca_addr.port, foreign_ip, (*peer)-address.port);#endif return 0; fail:if(*host) enet_host_destroy(*host); return -1;}4)User_Enet_DisConnect断开连接函数 int User_Enet_DisConnect(ENetHost *host, ENetPeer *peer) {int ret;#ifdef _DEBUGchar local_ip[16], foreign_ip[16];ENetAddress local_addr;enet_socket_get_address(host-socket, local_addr);enet_address_get_host_ip(local_addr, local_ip, sizeof(local_ip));enet_address_get_host_ip(peer-address, foreign_ip, sizeof(foreign_ip));printf(%s:%d is disconnected from %s:%d, local_ip, local_addr.port, foreign_ip, peer-address.port);#endifENetEvent event;enet_peer_disconnect(peer, 0);while((ret enet_host_service(host, event, peer-roundTripTime)) 0){switch (event.type){case ENET_EVENT_TYPE_RECEIVE:enet_packet_destroy (event.packet);break;case ENET_EVENT_TYPE_DISCONNECT:ret 0;goto disconn_ok;}}ret 0ret ? 1 : -1;fprintf(stderr, enet_host_service with timeout %d %s, peer-roundTripTime, 1ret?timeout:failure);enet_peer_reset(conn-peer);disconn_ok: enet_host_destroy(host);return ret;}5)User_Enet_SendMsg发送数据函数 int User_Enet_SendMsg(ENetHost *host, ENetPeer *peer, ENetPacket *packet){int ret;if(enet_peer_send(peer, 0, packet)){fprintf(stderr, enet send packet %lu bytes to peer fail, packet-dataLength);return -1;}ret enet_host_service(host, NULL, peer-roundTripTime);if(ret 0){if(peer-state ENET_PEER_STATE_ZOMBIE){fprintf(stderr, enet peer state is zombie);return -1;}return packet-dataLength;}else{fprintf(stderr, enet host service %u millsecond failure, peer-roundTripTime);return -1;}}int User_Enet_Send(ENetHost *host, ENetPeer *peer, const void *buf, size_t len){int ret;ENetPacket *packet enet_packet_create(buf, len, ENET_PACKET_FLAG_RELIABLE);if(NULLpacket){ fprintf(stderr, enet create packet %lu bytes fail, sizeof(int)len);return -1;}return User_Enet_SendMsg(host, peer, packet);}6)User_Enet_RecvMsg接收数据函数 int User_Enet_RecvMsg(ENetHost *host, ENetPeer *peer, ENetPacket **packet, unsigned int timeout){int ret;ENetEvent event;ret enet_host_service(host, event, timeout);if(ret 0){if(event.peer ! peer){fprintf(stderr, enet receive peer is not matched);goto fail;}if(event.type ! ENET_EVENT_TYPE_RECEIVE){fprintf(stderr, enet receive event type %d is not ENET_EVENT_TYPE_RECEIVE, event.type);goto fail;}*packet event.packet;return *packet)-dataLength;fail:enet_packet_destroy(event.packet);return -1;}else {fprintf(stderr, enet receive %u millsecond %s, timeout, ret?failure:timeout);return -1; }}int User_Enet_Recv(ENetHost *host, ENetPeer *peer, void *buf, size_t maxlen, unsigned int timeout) {ENetPacket *packet;if(-1User_Enet_RecvMsg(host, peer, packet, timeout))return -1;if(packet-dataLength maxlen) {fprintf(stderr, enet packet data length %d is greater than maxlen %lu, packet-dataLength, maxlen);return -1;}memcpy(buf, packet-data, packet-dataLength);enet_packet_destroy(packet);return packet-dataLength;}7)User_Enet__WaitAck 等待所有确认函数 发送数据的确认需根据对端状态判断是否断线 int User_Enet__WaitAck (ENetHost *host, ENetPeer *peer, unsigned int timeout){int ret, cnt 0;while((ret enet_host_service(host, NULL, 1)) 0){ if(enet_peer_is_empty_sent_reliable_commands(peer, 0, ENET_PROTOCOL_COMMAND_SEND_RELIABLE|ENET_PROTOCOL_COMMAND_SEND_FRAGMENT))return 0;if(peer-state ENET_PEER_STATE_ZOMBIE){fprintf(stderr, enet peer state is zombie);return -1;}if(0ret cnttimeout){return 1;}}fprintf(stderr, enet host service fail);return -1;}使用举例 客户端 User_Enet_Connect-User_Enet_SendMsg或User_Enet_Send-User_Enet_WaitAck 服务端 User_Enet_Listen-User_Enet_Accept-User_Enet_Recv或是User_Enet_RecvMsg
http://www.pierceye.com/news/475983/

相关文章:

  • 南京网站建设方案智能管理系统
  • 黄埔网站建设价格资源网站推广
  • 桦南县建设局网站动漫制作技术和动漫设计
  • 在农村开个网站要多少钱网站客户运营
  • 免费做文字图网站企业所得税计算方式
  • 做网站要有策划么设计师专用网站
  • 站长之家是什么哈尔滨模板建站服务商
  • 自己做网站需要备案么关键词seo资源
  • 用tornado做网站网站建设素材库
  • dedecms织梦古典艺术书画书法公司企业网站源码模板wordpress 优酷插件
  • 深圳购物网站建设301跳转wordpress
  • 如何做自己的加盟网站开发高端客户
  • 沈阳网站建设哪里好wordpress模块管理系统
  • 跨境外贸平台有哪些天津百度快速排名优化
  • 网站建设需要了解哪些方面企业的网站建设与设计论文
  • 网站建设市场分析内蒙古企业网站建设
  • 广州 网站建设公司不用代码做网站的软件
  • 本地php网站搭建wordpress前台注册登入
  • 网站做推广页需要什么软件下载豪禾创意海报设计理念
  • 河北特定网站建设推荐网站建设的技术可行性
  • 招投标 网站建设哈尔滨做网站哪好
  • 骏域网站建设专家东莞展台展馆设计搭建
  • 免费的html网站东丽手机网站建设
  • 网站建设谈客户说什么广州网站快速制作
  • 寻花问柳专注做男人喜爱的网站做网站教程 第一课
  • 个人做外贸接订单网站简道云crm
  • 小程序免费制作平台教学东莞seo关键词
  • 微网站设计平台网络营销相关的岗位有哪些
  • 手机网站建设软件有哪些内容如何做自己的加盟网站
  • 做购物平台网站 民治农业信息网站建设方案