今天因為工作需要把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。
就這麼簡單,開心啊!可能漏掉一些細節部分,不過基本會寫程序的都應該能解決。