freefly
驱动牛犊
驱动牛犊
  • 注册日期2001-11-08
  • 最后登录2007-02-11
  • 粉丝0
  • 关注0
  • 积分113分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
阅读:1418回复:1

求教: 网络字节顺序问题

楼主#
更多 发布于:2004-10-12 16:53
这里问一个菜鸟问题:
我拦截rtp数据包,下面是报头定义:
#pragma pack(push,1)
typedef struct _RTPHEADER
{
unsigned int version:2; /* protocol version */
unsigned int p:1; /* padding flag */
unsigned int x:1; /* header extension flag */
unsigned int cc:4; /* CSRC count */
unsigned int m:1; /* marker bit */
unsigned int pt:7; /* payload type */
unsigned short seq; /* sequence number */
unsigned int ts; /* timestamp */
unsigned int ssrc; /* synchronization source */
unsigned int csrc[1]; /* optional CSRC list */
}RTP_HEADER, *PRTP_HEADER;
#pragma pack(pop)

可是因为网络字节顺序问题,我用下面的方法得到错误结果,
BOOL CProcRTP::IsRTP(unsigned char *pkt, int len)
{
/*if(len<sizeof(RTP_HEADER))
return FALSE;
PRTP_HEADER pRtpHead = (PRTP_HEADER)pkt;
TRACE("RTP Version:%dn", pRtpHead->version);
TRACE("RTP PayloadType: %dn", pRtpHead->pt);
TRACE("RTP Sequence:%dn", pRtpHead->seq);
if((pRtpHead->version==2)&&(pRtpHead->pt==4))
return TRUE;
}

不知道怎么样才能得到正确的结果?

defendmidfield
驱动牛犊
驱动牛犊
  • 注册日期2002-06-05
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-10-15 00:12
一般都是
RTPHEAD
{
unsigned char version:2;
unsigned char padding:1;
unsigned char extension:1;
unsigned char cc:4;
unsigned char marker:1;
unsigned char payloadtype:7;
unsigned short seq; /* sequence number */
unsigned int ts; /* timestamp */
unsigned int ssrc; /* synchronization source */
}

RTPHEAD *hdr
然后
hdr->seq = htons();
hdr->ts = htonl();
....
unsighed char就不需要处理了。。直接赋值

接受时候转换回来
htons对应ntohs
htonl对应ntohl
呵呵
游客

返回顶部