一:GPRS簡介
GPRS是整合封包無線電服務(General Packet Radio Service)的簡稱,它突破了GSM網只能提供電路交換的思維方式,只通過增加相應的功能實體和對現有的基站系統進行部分改造來實現封包交換,這種改造的投入相對來說並不大,但得到的使用者資料速率卻相當可觀。GPRS(General Packet Radio Service)是一種以全球手機系統(GSM)為基礎的資料轉送技術,可說是GSM的延續。GPRS和以往連續在頻道傳輸的方式不同,是以封包(Packet)式來傳輸,因此使用者所負擔的費用是以其傳輸資料單位計算,並非使用其整個頻道,理論上較為便宜。
目前GPRS已經有了廣泛的應用,在日常生活中可以使用手機、PDA、PC無線上網娛樂、查詢;在工作中提供了隨處工作、地圖導航等功能,這些功能大大便利了我們的工作,使得我們隨時都可以完成自己的工作等需求。
二:PDA上如何啟動GPRS
PDA串連GPRS接入可以在串連裡設定,但是一定要設定成CMNET,不要設定csd號碼。
三:如何通過程式調用GPRS
PDA上網有兩種常見方式,一種是通過Microsoft ActiveSyn與PC串連上網;一種是通過GPRS或藍芽,一般情況下PDA上只支援一種網路連接方式。所以在一般情況下在啟動GPRS網路時先要判斷是否已經串連到了Internet,如果已經串連到了則無法啟動GPRS串連。
啟動PDA上的GPRS功能,除了使用系統內建的上網工具如Internet瀏覽器外,就是自己使用程式來啟動。
自己使用程式來啟動GPRS涉及到RAS網路編程 所以要先包含標頭檔
#include <initguid.h>
#include <connmgr.h>
#include "Ras.h"
接下來判斷是否存在(GPRS)網路:如果要判斷啟動是否GPRS網路,先要列出所有網路連接列表,在判斷啟用的是哪個。由於一般情況下PDA在串連Microsoft ActiveSyn串連網路的情況下,其他方式一般無法啟動,所以判斷是哪種上網方式沒有太多的意義,這裡我直接判斷PDA是否串連到了Ineternet;
1:判斷是否串連到網路
定義參數: DWORD dwError, dwRasConnSize, dwNumConnections; RASCONN RasConn[20];//此參數存放當前活動的Ras串連if (dwError = RasEnumConnections (RasConn,&dwRasConnSize,&dwNumConnections)) return -1;//這裡表示無法串連如果dwNumConnections返回參數為0時 表示沒有網路連接,不為0時,終止現有的網路連接,在啟動GPRS。 2:如果存在 先斷開所有遠程接入 if (dwError = RasHangUp(RasConn[index].hrasconn)) return -1; else return 0; //成功關閉3;串連GPRS
使用函數ConnMgrEstablishConnectionSync來申請請求,連線類型主要是根據第一個參數來設定。
四:使用WININET通過GPRS下載上傳資料
由於是做小資料量的網路傳送,所以使用Winnet。在下載過程中遵循一般下載過程
首要要作出設定,發送資料、接受資料以及同時訪問伺服器的串連限制
1現在建立CInternetSession對象
CInternetSession inetSession(_T(""));
CHttpConnection* pHttpConn = NULL;
CHttpFile* pHttpFile = NULL;
2針對串連伺服器逾時及限制設定
如:inetSession.SetOption(INTERNET_OPTION_MAX_CONNS_PER_SERVER,&uParam,sizeof(int));
第一個參數表示設定的類型:這裡我們主要設定
請求伺服器時間INTERNET_OPTION_CONNECT_TIMEOUT
發送資料時間- INTERNET_OPTION_SEND_TIMEOUT、
接受資料的時間INTERNET_OPTION_RECEIVE_TIMEOUT、
伺服器串連個數INTERNET_OPTION_MAX_CONNS_PER_SERVER、INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER;
3調用CHttpConnection::OpenRequest建立一個CHttpFile對象
4發送資料:CHttpFile::AddRequestHeaders
CHttpFile::SendRequest
這裡發送資料只有在網路正常的情況下才能正常設定逾時,詳細處理看注意事項;
5:接受資料儲存檔案
使用CHttpFile::QueryInfo接受返回資料,判斷參數值範圍,如果正確則將讀取到的資料存入檔案,這裡要注意轉換位元組轉換。
6:異常處理 對所有異常的捕獲可以是程式更穩定。
五:注意事項:
一:由於通過GPRS實現通過無線網路與遠程伺服器的串連存在不穩定和掉線等情況,如當時所在地區GPRS網路不穩定造成網路通行失敗。
二:在網路不穩定或者突然斷線情況下,使用Winnet網路連接會出現錯誤或不穩定造成退出或者網路逾時無法返回,使得使用者介面堵塞或者退出。
三:在使用Winnet多線程串連伺服器時,要一定要設定運行TCP/IP最大串連數,否則部分線程會堵塞返回逾時等錯誤。
解決方案:
(1)建立TCP串連的過程中要考慮到每一步可能會出現的錯誤,比如裝置沒有串連好、網路訊號品質不高引起串連失敗等,因此在程式設計的時候要做到兩點,一是在程式啟動時啟動GPRS串連;二是在網路通訊時,需要擷取所有可能的錯誤並處理,同時也需要對接受到的返回的字串進行判斷,如果顯示操作成功則進入下一步。
(2)由於網路不穩定造成了設定發送資料逾時時間無效(微軟證實BUG),我在這裡經過測試,一般情況下大概在2-3分鐘內函數會返回,由於PDA不能非同步呼叫,所以這裡我等待3分鐘後,如果不返回則強行關閉網路連接線程。