今天因为工作需要把linux下面的一个http client库移植到了windows系统下,没想到如此简单。
我改的库是libghttp,如下是我的改写步骤:
首先建立一个空的控制台程序,然后把所有的源代码包含进来,编译。
编译会报告找不到头文件,直接把找不到的头文件去掉,其中有几个网络相关的头文件去掉之后会报告程序编译错误,把WinSock2.h包含进来就可以编译通过了。别的还有就是strcasecmp了,使用strcmp替代即可,当然有心情的话也可以自己写一个函数替代。
不出意外的话编译就会通过了,链接会出现问题。这里让人有点晕,其实直接把Ws2_32.lib连接进来即可,这个不是默认链接的lib。
写个测试程序,按照ghttp.h里面的接口函数,很快就可以构建起来一个http client,程序怎么写就不说了。编译连接,开始调试。
调试第一个碰到的问题就是gethostbyname返回错误,折磨了我一阵;上网找资料,呵呵,没有添加socket初始化调用,程序开始加上WSAStartup,结束加上WSACleanup,解决一个。
继续调试,write报告问题,大家都知道linux下网络发送数据使用和文件操作一样的方式,但是windows不一样,使用send替换掉write,send多一个参数,填个0即可。
再下来出现的问题大家也许就可以猜到了,有write错,就一定有read错,替换成recv,同样给多的一个参数填0;再就是close了,替换成closesocket。
就这么简单,开心啊!可能漏掉一些细节部分,不过基本会写程序的都应该能解决。