在WM5.0下,通過移動的網關發送GET請求,其實現方法有以下兩種:用微軟封裝的CInternetSession、CHttpFile類和用SOCKET。
用微軟封裝的CInternetSession、CHttpFile類,必須要給VC8打上SP1補丁,這個補丁裝起來比較費事;另外必須采用異步(多線程),否則會超時收不到數據,這是微軟的一個BUG;在接收數據時,如果采用C++標準的流操作,那么在解析數據時很有可能出現亂碼,這個問題出現的不明顯,但是在大數據時,出現的機率很大,用了一天的時間才發現是緩沖的原因,在最后一次向文件中寫數據時,如果數據不足以填充整個緩沖區,那么文件中很有可能有亂碼,由于這個錯誤有很大的偶然性,所以很難察覺,建議用MFC封裝好的文件類。
用SOCKET將數據封裝成HTTP格式發送到服務器端,在程序或進程第一次發送GET請求時,要發兩次,第一次收到的是移動網關發給客戶端的數據,以后發一次就可以,要格外注意的是,在連續發數據時,要先關掉SOCKET在發,然后再發;在發送完數據,必須要Sleep上幾秒,等待接收完數據,這和異步類似;它的接收文件,如果要用文件操作,也建議用MFC封裝的類,如果接收的數據比較大時。
綜上所述,兩種方法的本質其實沒什么差別,只是用SOCKET可能比較簡單,其他的如用ACE,其原理都一樣,還是得異步或多線程。另外在用SOCKET時,接收到的文件中含有以前接收的數據,但是在讀文件時確只有本次接收的數據,這一點要注意。