我用raw socket得到ip包后,保存在recvBuf中,然后只将目标ip地址修改为"192.168.1.100"后发送出去,每次发送都出错,不知道什么原因。修改和发送部分的代码如下:IP_HEADER *pIpheader = (IP_HEADER *)recvBuf;
pIpheader->destIP = inet_addr("192.168.1.90");
pIpheader->checksum = 0;
unsigned short iCkSum = 0;
iCkSum = pSH->CheckSum(recvBuf, sizeof(IP_HEADER)/2); //计算ip头的校验和
pIpheader->checksum = iCkSum;
int ret = send(pSH->m_sockCap, recvBuf, MAX_PACK_LEN, 0);
if (ret == SOCKET_ERROR)
printf("send error!");请问有什么问题?
pIpheader->destIP = inet_addr("192.168.1.90");
pIpheader->checksum = 0;
unsigned short iCkSum = 0;
iCkSum = pSH->CheckSum(recvBuf, sizeof(IP_HEADER)/2); //计算ip头的校验和
pIpheader->checksum = iCkSum;
int ret = send(pSH->m_sockCap, recvBuf, MAX_PACK_LEN, 0);
if (ret == SOCKET_ERROR)
printf("send error!");请问有什么问题?
而不是 MAX_PACK_LEN
别这样一个函数一个函数的写,看起来多类啊sendto 与send 的区别
sendto 是用于根据创建的套接字发送网络数据包(UDP协议使用),需要你创建socket
而send 则是你已经连接了服务器(socket在连接时候已确定),才使用的发送函数,如TCP/IP协议
在你与服务器连接成功,就可以使用send函数发送数据了,否则使用sendto发送所以,你这个情况,应该使用sendto,而不应该使用send
再去看看winsocket基础吧