18,356
社区成员
发帖
与我相关
我的任务
分享
//发送单元
typedef struct _UDT_SND_ITEM_
{
USHORT uBufLen; //chBuf的数据长度
USHORT uLimitCnt; //发送次数限制
SOCKET hSock; //UDP句柄
CHAR chBuf[DATA_BUFSIZE]; //要发送的数据,UDT头 + 数据
DWORD dwLastTime; //最后发送时间(如果为0xFFFFFFFF则表示已经确认)
SOCKADDR_IN To; //发送的目的地
}UDT_SND_ITEM;
在CUDTSend类中的变量 DWORD * m_pdwPos是用来维护发送单元的集合,当UDTSend函数将一个要发送的数据包拆分成独立的发送单元并发送时,都会依据这个发送单元的序号将该发送单元添加到m_pdwPos集合中,使该集合中的对应序号的地址就是这个发送单元。目前这个发送缓冲区的最大容量使65536,也就是最大可以存储65536个未确认的发送单元。//接收包单元
typedef struct _UDT_RECV_ITEM_
{
DWORD dwSeq; //序号
DWORD uRecvLen; //数据长度
CHAR chBuf[DATA_SNDSIZE]; //数据部分
}UDT_RECV_ITEM;
//数据包(接收单元的组合)
typedef struct _UDT_RECV_ITEMS_
{
DWORD dwSeqSpan; //包序号区间
USHORT uPacketCount; //包数量来自于包区间序号相减
USHORT uRecvCount; //已经接收的包数量
DWORD dwLastTime; //最后接收到包的时间
CCriticalSection cs_item; //接收单元同步对象
DWORD dwItemPos[1024]; //所有接收包单元集合
_UDT_RECV_ITEMS_ * ItemsNext; //指向下一个ITEMS结构
}UDT_RECV_ITEMS;
//主机结点(每个接收的主机信息)
typedef struct _UDT_RECV_PEER_
{
SOCKADDR_IN Peer; //发送端
DWORD dwLastTime; //最后更新时间
CCriticalSection cs_items; //包表示同步对象
_UDT_RECV_ITEMS_ * ItemsNext; //指向下一个ITEMS结构
_UDT_RECV_PEER_ * PeerNext; //指向下一个节点
}UDT_RECV_PEER;