我现在在用Creator做个网络方面的测试程序,里面用到UDPSocket,在解析数据时需要用到ntohl这些函数,自然要包括winsock2.h、ws2tcpip.h这些头文件,但编译时出现undefined reference to ntohl@4的问题,这个一看一般是没有连接到库的问题,我就在程序中添加了#pragma comment(lib,"Ws2_32.lib")但又出现ignoring pragma comment的问题,我想问一下Qt在哪里可以像VS一样的直接添加lib文件呢?为什么出现ignoring pragma comment呢?期待高人
------解决方案--------------------
编辑.pro文件,加上LIBS += Ws2_32.lib试试。
话说QT有自己的socket函数,为什么不用呢?
------解决方案--------------------
你编译器用的什么?mingw还是msvc?
如果是msvc
#pragma comment(lib,"Ws2_32.lib")
是没有错的。
如果是mingw就要
在pro文件中加入:
LIBS+= Ws2_32.lib
------解决方案--------------------
QtEndian可以转换
T qFromBigEndian ( const uchar * src )
T qFromBigEndian ( T src )
T qFromLittleEndian ( const uchar * src )
T qFromLittleEndian ( T src )
void qToBigEndian ( T src, uchar * dest )
T qToBigEndian ( T src )
void qToLittleEndian ( T src, uchar * dest )
T qToLittleEndian ( T src )
------解决方案--------------------
mingw32中没有#pragma comment(lib,"Ws2_32.lib")这样的预处理命令。
------解决方案--------------------
自己判断一下是高字节在前还是低字节在前。
------解决方案--------------------
在理想的世界里,网络字节顺序一定是big endian的,不过现在流行的桌面系统基本上都是little endian,如果按照标准则每次收发数据都要做相应的转换,比较麻烦,所以很多情况下都直接上little以提高效率。这个没办法自己判断,双方必须事先约定,默认的约定是big endian。实在不知道就猜,多试几个数很容易猜出来