Enet学习(一)

目前正在看Enet,传输过程如下:

循环中,enet_peer_send()函数的目的是将需要传输的数据包packet放入待发送的队列中

enet_host_service()函数是真正的数据发送函数(接收端函数也是这个)

        ENetPacket *packet=enet_packet_create(NULL,ret,ENET_PACKET_FLAG_RELIABLE);
        memcpy(packet->data,buff,ret);
        enet_peer_send(server,0,packet);                                                                                                                  
        enet_host_service(client,NULL,5);

ENetPacket* enet_packet_create(const void * data,size_t  dataLength,enet_uint32  flags )		
#include <packet.c>
Creates a packet that may be sent to a peer.

创建时会有flags,各个flags表示:

Enumerator
ENET_PACKET_FLAG_RELIABLE packet must be received by the target peer and resend attempts should be made until the packet is delivered
ENET_PACKET_FLAG_UNSEQUENCED packet will not be sequenced with other packets not supported for reliable packets
ENET_PACKET_FLAG_NO_ALLOCATE packet will not allocate data, and user must supply it instead
ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT packet will be fragmented using unreliable (instead of reliable) sends if it exceeds the MTU
ENET_PACKET_FLAG_SENT whether the packet has been sent from all queues it has been entered into

由此可以选择合适的packet,该函数创建flags并原样传出来。供下面函数使用:

<span style="font-family: Arial, Helvetica, sans-serif;">int enet_peer_send(ENetPeer * 	peer,enet_uint8 channelID,ENetPacket * 	packet )</span>
#include <peer.c>
Queues a packet to be sent.
 

调用flags过程如下:

      if ((packet -> flags & (ENET_PACKET_FLAG_RELIABLE | ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT)) == ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT &&
          channel -> outgoingUnreliableSequenceNumber < 0xFFFF)
      {    
         commandNumber = ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE_FRAGMENT;
         startSequenceNumber = ENET_HOST_TO_NET_16 (channel -> outgoingUnreliableSequenceNumber + 1);
      }    
      else 
      {    
         commandNumber = ENET_PROTOCOL_COMMAND_SEND_FRAGMENT | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE;
         startSequenceNumber = ENET_HOST_TO_NET_16 (channel -> outgoingReliableSequenceNumber + 1);
      }



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值