我用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!");请问有什么问题?

解决方案 »

  1.   

    还有,你发送的时候,长度值应填写 IP 包的长度,
    而不是 MAX_PACK_LEN
      

  2.   

    sendto和send有什么区别呀?我接收的时候用的是recv函数也可以接收呀。
      

  3.   

    自己把这些socket封装一下,放到类里面去使用
    别这样一个函数一个函数的写,看起来多类啊sendto 与send 的区别
    sendto 是用于根据创建的套接字发送网络数据包(UDP协议使用),需要你创建socket
    而send 则是你已经连接了服务器(socket在连接时候已确定),才使用的发送函数,如TCP/IP协议
    在你与服务器连接成功,就可以使用send函数发送数据了,否则使用sendto发送所以,你这个情况,应该使用sendto,而不应该使用send
    再去看看winsocket基础吧