1. 每一次GPRS模塊撥ATD*99***1#(或ATD*99***1#)之后其實都在采用PPP協(xié)議和移動的接入設(shè)備(一般是移動公司的一臺特殊的GGSN路由器)進行握手,當PPP協(xié)議握手成功后,GPRS模塊都會獲得一個動態(tài)IP地址。一般來說,每一次GPRS模塊下線后(掛斷連接或者直接斷電后)在重新進行撥號和PPP握手后取得的動態(tài)IP地址都是不一樣的。但是移動公司可以通過為客戶開通特定的APN和發(fā)行特殊的SIM卡,使得用這張SIM卡獲得的動態(tài)IP地址每一次都不變。也就是說可以做到SIM卡和IP地址綁定。
2. 我們在做測試時,應(yīng)當注意到如下事實:在采用公網(wǎng)的Apn(“cmnet”)的條件下,如果我們用GPRS模塊主動向公網(wǎng)上的一個靜態(tài)公網(wǎng)IP地址發(fā)起TCP連接,只要這個公網(wǎng)上的機器確實有偵聽相應(yīng)的端口,這樣是可以連上的;但是相反地,如果是由公網(wǎng)上的靜態(tài)IP向GPRS模塊動態(tài)獲得的IP地址主動發(fā)起的TCP連接將不會成功。這個現(xiàn)象的原因是:實際上GPRS模塊獲得的動態(tài)IP地址是移動的一個特殊的內(nèi)部網(wǎng)段上的地址,這個特殊內(nèi)部網(wǎng)段里的地址如果要和外部網(wǎng)(公網(wǎng))的地址進行TCP通信,必須通過一個類似于TCP代理(或者NAT)的設(shè)備進行通信的轉(zhuǎn)發(fā)。換句話說,這個動態(tài)地址對于網(wǎng)絡(luò)上的其他機器來說是不可訪問的。
3. 標準AT命令+CGDCONT的主要作用是指定Apn。Apn是Access Point Name(訪問接入點)的縮寫,移動通過開通特殊的Apn為行業(yè)客戶提供Vpn(Virtual Private Net)服務(wù)。比如說,如果是要上公網(wǎng)(Internet),應(yīng)當使用“cmnet”作為Apn。又如,某企業(yè)向移動公司申請了Vpn服務(wù),移動公司為其開通了一個Apn為“hxsw.gd”,則我們就應(yīng)當用這個Apn來設(shè)置Gprs模塊,格式如下:
AT+CGDCONT=1,“IP”,“hxsw.gd”
4. 確定一條TCP連接有4個要素,這4個要素是雙方的IP地址和雙方的TCP端口號,這也就是GPRS模塊為什么將本地端口、目的端口和目的IP地址結(jié)合起來作為連接的ID號(GPRS模塊在PPP握手成功后獲得的動態(tài)地址只要不斷線重連就不會改變)的原因。
5. 使用TCP協(xié)議進行數(shù)據(jù)通信時,必須要經(jīng)過三個階段,第一個階段是連接建立階段,第二個階段是數(shù)據(jù)收發(fā)階段,第三個階段是連接釋放階段:
1).連接建立階段:
連接的建立又有主動連接和被動連接之分,一般來說客戶機都是主動發(fā)起連接的,而服務(wù)器是被動接受連接的。
所謂的主動連接是指本方主動向遠端發(fā)起連接請求, 而被動連接指的是本方偵聽一個端口,等待遠端及其主動向自己發(fā)起一個連接請求并且進行回應(yīng)并且最終握手建鏈成功。
在連接成功,切換到數(shù)據(jù)態(tài)后,我們可以通過OPEN命令幀控制GPRS模塊 進行主動連接。當然,連接時要指定對方的IP地址和端口號。至于被動連接,GPRS模塊也可以支持,目前的程序只支持偵聽一個端口。對方主動連接(GPRS模塊被動連接)成功后將建立一條新的通信連接,GPRS模塊將把這個被動連接成功的事件通知給上位機。
2).數(shù)據(jù)收發(fā)階段:
當一條連接建立之后,我們就可以在這條連接上進行數(shù)據(jù)收發(fā)了。
我們可以使用SEND命令幀控制GPRS模塊進行數(shù)據(jù)發(fā)送。當然,發(fā)送時要指定連接號(通過本地端口、目的地址和端口唯一確定)。
對于對方發(fā)送過來的數(shù)據(jù),GPRS模塊首先將其存儲在自身的數(shù)據(jù)緩沖區(qū)中,然后將數(shù)據(jù)已到達此事件通知給上位機,上位機讀取到數(shù)據(jù)已到達事件后,應(yīng)當及時使用RECV命令幀控制GPRS模塊將相應(yīng)連接上的所有數(shù)據(jù)通過串口讀出,當數(shù)據(jù)讀出后,這些數(shù)據(jù)原先占用的數(shù)據(jù)緩沖區(qū)空間將會被釋放。注意,由于GPRS模塊的數(shù)據(jù)緩沖區(qū)有限(總量僅有25K Bytes),所以,對于對方發(fā)來的數(shù)據(jù),上位機一定要及時讀出,否則數(shù)據(jù)越積越多,可能會導致數(shù)據(jù)緩沖區(qū)溢出,丟失數(shù)據(jù)。
3).掛斷連接階段:
當一條連接上的所有數(shù)據(jù)都已經(jīng)收發(fā)完成了,不再需要這條連接時,就可以把連接給掛斷了。
和連接建立階段相類似,掛斷也分為主動掛斷和被動掛斷。
我們可以使用RSET命令幀控制GPRS模塊進行連接的主動掛斷。
如果連接被對方主動掛斷,GPRS模塊將會把這個事件通知給上位機進行處理。
地址:北京海淀區(qū)知春路23號量子銀座903(863軟件園)
淘網(wǎng)址:http://shop35321900.taobao.com