如题,在TCPIP通讯过程中,客户端向服务端发送数据,通过函数
int pdataLen = nfq_get_payload(nfa, ((unsigned char**)&pdata));
获取到数据的全部内容,如下
4500004961ED40007F060C61C0A80176C0A80A9A55AB22B8637991074ECE3A9E50180100F0E800000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2039
那么数据的大概可以分解为
4500004961ED40007F060C61C0A80176C0A80A9A // IP头
55AB22B8637991074ECE3A9E50180100F0E80000 // TCP头
0102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2039 // 发送的数据
然后我将发送说的数据全部修改成FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,长度不变,然后计算校验和等等,然后发送数据,使用函数
nfq_set_verdict(qh, id, NF_ACCEPT, pdataLen, pdata);
那么数据会出现客户端发送两三次数据之后,客户端才能收到一条数据,并且按照数据长度计算的话是客户端发送的一包数据长度的2倍,也就是两个数据包粘合到一起发送到服务端的。那么如果使用
nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL);
这么发送,那么客户端数据发送的次数和服务端接收到的次数是一样,也就是客户端发送一条数据服务端即可接受一条数据,但是数据还是原来的数据,并没有将数据改成全FF的情况,请问一下大佬,不知道我现在这个问题是什么原因造成的呢,怎么解决呢
就是校验和计算的问题