解析Tcp协议包头(包头:0x7R7R1E1E)
个人体会
首先tcp协议的数据传输是一个数据流,也就是像水管一样的,一头是我们的水井,一头是用水的人,比如我们想要500L水,这时候打开水龙头,水是通过水管流出来的,在需要很多水的时候,我们需要慢慢的接,不可能一下子就有我们的500L期望量。
代码
首先自己也是学习的情况下,写下自己的心得,有错误的望提出,互相提升。
下面展示一些 找头0x7R7R1E1E
。
下面展示一些 找头结构体信息
。
int FindNetHeader(char *buf,int len)
{
int i=0;
for(i = 0;i<len-4;i++)
{
if(memcmp(buf+i,"\x1e\x1e\x7r\x7r",4) == 0)
{
break;
}
}
return i;
}
int RecvTcpHeader(int socket_fd,Header head_std)
{
int recvLen = 0;
char recv_buff[128];
memset(recv_buff,0,128);
int head_len = sizeof(Header)
int rtn;
int whichHead;
while(1)
{
rtn = recv(socket_fd,recv_buff+recvLen ,head_len -recvLen );
if(rtn <= 0)
{
return 0;
}
else
{
recvLen +=rtn ;
if(recvLen >= head_len )
{
whichHead = FindNetHeader(recv_buff,head_len )
if(whichHead > 0)
{
recvLen -= whichHead ;
memmove(recvbuf,recvbuf+whichHead ,recvLen);
}
else//找到了头
{
memcpy((char *)head_std,recv_buff,head_len);
return recvLen;
}
}
}
}
}