此模塊分兩部分完成,傳輸數據用socket?,要使用socket在ppc上進行數據傳輸,就要誰讓ppc自動連接gprs?。其中套接字和gprs鏈接分別進行說明。
?
一?,應用程序在進行其它所需的Windows?Sockets?API調用需要進行一次成功的WSAStartup()調用,然后就是套接字編程。分為服務器端和客戶端。
?
服務器:
先建立套接字
SOCKET WSASocket(int af,int type,int protocol,LPWSAPROTOCOL_INFO lpProtocolInfo,GROUP g,DWORD dwFlags);//具體參數參見設置MSDN
然后初始化一個SOCKADDR_IN結構體,然后用bind()將本地ip與端口與socket進行綁定,之后用listen()監聽該套接字,如果有連接請求則使用accept()建立連接,然后用send()和recv()接受和發送數據,最后關閉套接字。
客戶端:
客戶端與服務器端不同的是不需要進行socket綁定,不需要監聽是否有連接請求,也不用accept()建立連接,而是用connect()發起連接請求。
?
進行調試時必須先運行服務器端,再運行客戶端。
?
二,首先我們利用ConnMgrApiReadyEvent()函數來確認是否有可用連接,利用此函數來我們可以返回一個連接事件的句柄?,注意在的得到句柄后要記得及時釋放,
然后用WaitForSingleObject()函數的返回值可以判斷在指定時間內是否找到可用連接,如果返回值WAIT_OBJECT_0說明有可用連接,然后通過ConnMgrMapURL?()函數來選則一個最好的鏈接,函數原型為:
HRESULT WINAPI ConnMgrMapURL( LPCTSTR pwszURL, GUID * pguid, DWORD * pdwIndex
);
ConnMgrMapURL()是通過給定的pwszURL地址,讓系統自己選擇一條最適合的網絡連接來訪問該URL,如果手機可以通過GPRS/Activesync/Wifi/3G等多種方式訪問某個網絡資源,用這個API你就不用擔心到底該用什么方式聯網,系統會自己給你選一條最適合的網絡連接。第二個參數GUID?*?pguid是根據第一個參數pwszURL進行賦值,即你訪問的URL是http還是wap,每種都有一個全局唯一標識。然后通過ConnMgrEstablishConnectionSync()進行連接,此函數要傳遞一個CONNMGR_CONNECTIONINFO結構體,用于保存客戶端的連接信息。然后就可以進行socket通信了,就是第一部分所說的。最后用ConnMgrReleaseConnection()釋放連接。
?
提示:cmwap所獲得的地址是經過分組的,我抓幾次包都是10開頭的ip,輸入內網,外網的服務器找不到這樣的ip,cmwap是未分組的,抓包顯示的就是公網ip.
?
PS:較久以前做的關于windows mobile的項目