我在局域网里做一个测试小程序,当sockaddr::s_addr用htonl返回的值赋值时它下面的函数调用就失败,
不用时反而会成功。那这个函数到底在什么情况下调用?

解决方案 »

  1.   

    x86CPU的内存单元采用的是小头顺序,即低地址是最不重要的字节,高地址是最重要的字节。
    比如0x12345678,在内存里的存放顺序是 0x98,0x76,0x54,0x32(地址从低到高)
    网络协议使用的字节顺序是大头顺序,正好相反。htonl函数把一个长整数从主机(CPU)字节顺序转换到网络字节顺序。
      

  2.   

    是——
    比如0x23456789,在内存里的存放顺序是 0x98,0x76,0x54,0x32(地址从低到高)_____________写错了
      

  3.   

    Host TO Net for Long
      

  4.   

    htonl就是把地址顺序转成网络顺序,局域网也是网络,在局域网内也要用网络顺序的IP地址啊。
      

  5.   

    接收的时候要由网络顺序转成CPU次序