有关解析IP报文的有关问题

有关解析IP报文的问题。
现在在学WINDOWS 网络编程, 遇到这么一个问题, 先获取到网络层的数据,然后将IP头中解析,再根据IP头中的protocol 来判断数据是根据TCP还是UDP协议传送的,在书上代码是这样的:


void DecodeIPPacket(char *pData)
{
IPHeader *pIPHdr = (IPHeader*)pData;
in_addr source, dest;
char szSourceIp[32], szDestIp[32]; 

printf("\n\n-------------------------------\n");

// 从IP头中取出源IP地址和目的IP地址
source.S_un.S_addr = pIPHdr->ipSource;
dest.S_un.S_addr = pIPHdr->ipDestination;
strcpy(szSourceIp, ::inet_ntoa(source));
strcpy(szDestIp, ::inet_ntoa(dest));

printf(" %s -> %s \n", szSourceIp, szDestIp);
// IP头长度
int nHeaderLen = (pIPHdr->iphVerLen & 0xf) * sizeof(ULONG);

switch(pIPHdr->ipProtocol)
{
case IPPROTO_TCP: // TCP协议
DecodeTCPPacket(pData + nHeaderLen);
break;



第22行不明白。为什么进行TCP解析的时候,需要把数据再加上IP头长度呢?? 求指教!
网络编程 TCP/IP

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

IP头不是已经解析完了吗, DecodeTCPPacket这个函数将处理头后面的内容, 所以22行传参数的时候, 就直接利用偏移量把头给忽略过去呗



引用:
你可以将这句话看成, &pData[nHeaderLen], 作者只是想跳过头。
你还是先看看,C/C++基础吧。


基础不太好,一不小心就忘了。。。。一个char 不是占2个字节,pData + nHeaderLen这样不是偏移了2*头长度个字节吗?
char是两个字节有关解析IP报文的有关问题
你基础不是不太好, 是太不好了...
巩固巩固基础吧, 这个问题就不是问题了...


额,,我以前是学JAVA的。。JAVA中是占2个字节。想混了。不好意思啊。。有关解析IP报文的有关问题
嗯 这个是基础 巩固下就好..有关解析IP报文的有关问题