天天看點

如何使用TCP向遠端SERVER傳輸資料 (發送與接收)

1. 如何使用TCP向遠端SERVER傳輸資料

先要建立一個TCP連接配接.子產品作為CLIENT向遠端的SERVER發起一個TCP連接配接,要成功

建立連接配接需要SERVER端為連接配接到INTERNET的一台PC,而且該PC的IP位址是公網的IP位址

(可以用撥号的方式獲得,如在PC區域網路内部則無法建立連接配接),然後該PC運作我們的

SERVER軟體,這時就可以在子產品端用AT指令與SERVER建立TCP連接配接(AT+CIPSTART=

"TCP","SERVER的IP位址","SERVER的端口号"),連接配接成功後會傳回CONNECT

OK.然後就可以用AT+CIPSEND發送資料到SERVER,若SERVER有資料,子產品自動通過

序列槽接收.要關閉TCP連接配接可用AT+CIPCLOSE指令.

2. 如何使用UDP向遠端SERVER傳輸資料

先要注冊一個UDP端口(AT+CIPSTART="UDP","SERVER的IP位址","SERVER

的端口号"),成功後傳回CONNECT OK.然後用AT+CIPSEND發送UDP包到SERVER,

若SERVER有資料,子產品自動接收,從序列槽送出.

3. 如何發送資料

要發送資料必須先要建立TCP連接配接或注冊一個UDP連接配接.有3種方式發送資料.可變長

度的資料發送可以用AT+CIPSEND指令,傳回">"後輸入發送的資料,ctrl+z(0x1a)啟動

發送.固定長度的資料發送用AT+CIPSEND=LENGTH指令,傳回"> "後輸入發送的資料,

當輸入的資料長度等于LENGTH的時候自動發送,不需結束符.還有一種自動發送方式,先

用AT+CIPATS=,指令設定自動發送的時間,然後用AT+CIPSEND傳回">"

輸入要發送的資料,等定時到了之後自動發送輸入的資料.發送完成之後傳回SEND OK.

此時處于指令态,若有資料發送再重複以上的步驟就可以了.

注意:每次發送的資料長度應小于1024bytes.

4. 如何接收資料

接收資料為自動接收,若有遠端資料則自動接收.可以用AT+CIPHEAD=1在接收的數

據前面自動加上辨別.

SIMCOM Application Note for SIM100 TCP/IP AT Commands

4

5. 如何使用SIM100TCP的SERVER功能

子產品可以配置為TCPSERVER,接收來自遠端的TCP資料.具體的操作如下:

AT+CIPCSGP=1,"cmnet"(GPRS方式)

AT+CLPORT="TCP","PORT" (設定偵聽的TCP的端口号)

AT+CIPSERVER (啟動SERVER功能,成功後傳回SERVER OK,這時候已經啟動了SERVER

功能,開始偵聽PORT)

AT+CIFSR (獲得SERVER的IP位址)

或者:

AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置為CSD連接配接,撥17201,使用者名和密

碼皆為172,連接配接速率為9600)

AT+CLPORT="TCP","PORT"(設定偵聽的TCP端口号)

AT+CIPSERVER(啟動SERVER功能,成功後傳回CONNECT 9600 和 SERVER OK,這時

候已經啟動了SERVER功能,開始偵聽PORT)

AT+CIFSR (獲得SERVER的IP位址)

可以用SMS通知遠端子產品本SERVER的IP位址和端口号,以便遠端可以與之連接配接,收發

資料.

這時遠端的子產品就可以與本SERVER建立連接配接,收發資料了.

如有CLIENT連接配接到SERVER,SERVER端會顯示 REMOTE CLIENT的IP位址和端口号.

這時候SERVER就可以接收來自REMOTE CLIENT的TCP資料包(不含TCP頭)了.

注意:目前TCP SERVER不能同時支援多個TCP連接配接.

SIMCOM Application Note for SIM100 TCP/IP AT Commands

5

6. 如何使用UDP,接收來自遠端的資料

可以使用SIM100TCP的UDP功能,接收來自遠端的UDP資料.具體過程如下:

AT+CIPCSGP=1,"cmnet"(GPRS方式)

AT+CLPORT="UDP","端口号"(設定UDP端口号)

AT+CSTT (啟動TCP任務,成功後傳回OK)

AT+CIICR (激活場景,成功後傳回OK)

AT+CIFSR (獲得本地IP位址)

AT+CIPSTART="UDP","REMOTE IP ADDR","REMOTE PORT"(注冊UDP

連接配接,其中"REMOTE IP ADDR"和"REMOTE PORT"可以随便設定一個,成功

後傳回CONNECT OK)

或者

AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置為CSD連接配接,撥17201,使用者名

和密碼皆為172,連接配接速率為9600)

AT+CLPORT="UDP","PORT"(設定UDP端口号)

AT+CSTT (啟動TCP任務)

AT+CIICR (激活場景,成功後傳回CONNECT 9600和OK)

AT+CIFSR (獲得本地IP位址)

AT+CIPSTART="UDP","REMOTE IP ADDR","REMOTE PORT"(注冊UDP

連接配接,其中"REMOTE IP ADDR"和"REMOTE PORT"可以随便設定一個,成功

後傳回CONNECT OK)

此時就子產品就可以接收到遠端的UDP包.可以用AT+CIPSRIP=1在收到的UDP包的前面

加上辨別和發送方的IP位址和端口号.

SIMCOM Application Note for SIM100 TCP/IP AT Commands

6

7. 如何使用DNS功能

利用SIM100TCP的DNS可直接連接配接到一個域名,或者可以用DNS解析域名獲得IP位址.具體

步驟如下:

直接連接配接到一個域名

1:先配置DNS

AT+CDNSCFG="211.136.18.171" (以上海為例)

2:選擇域名還是IP位址

AT+CDNSORIP=1(選擇域名)

3:建立連接配接

AT+CIPSTART="TCP","www.263.net", "80" (連接配接到SERVER)

4:發送資料

AT+CIPSEND傳回">"後開始發送資料,ctrl+z啟動發送.

解析域名獲得IP位址

1:先激活一個移動場景

AT+CSTT

AT+CIICR

AT+CIFSR

2:配置DNS

AT+CDNSCFG="211.136.18.171" (以上海為例)

3:解析域名,獲得IP位址

AT+CDNSGIP="www.263.net"

傳回該域名的IP位址

8. 如何檢測是否線上,斷線後有什麼提示

可以用AT+CIPSTATUS查詢TCP所處的狀态,具體狀态請參考AT指令集,若處于連接配接

狀态則傳回CONNECTOK.斷線後會主動傳回CLOSE資訊,同時TCP狀态為IP CLOSE.

9. 如何區分接收的資料是AT指令的響應還是來自遠端

設定AT+CIPHEAD=1,這樣來自SERVER的資料前面就會自動加上一個标志,其格式

為:+IPD(datalength),+IPD為辨別,datalength為來自SERVER端資料的長度.這樣就可以

區分是來自SERVER的資料還是AT指令的相應.

SIMCOM Application Note for SIM100 TCP/IP AT Commands

7

10. 如何使用SIM100TCP建立點對點的TCP連接配接,傳輸資料

用GPRS方式的具體步驟為:

第一台:

AT+CLPORT="TCP","3030"

AT+CIPSERVER (啟動SERVER功能,開始偵聽3030端口)

AT+CIFSR(擷取本地IP位址)

AT+CLPORT="TCP","3000"(設定本地TCP端口)

第二台:

AT+CLPORT="TCP","2020"

AT+CIPSERVER (啟動SERVER功能,開始偵聽2020端口)

AT+CIFSR(擷取本地IP位址)

AT+CLPORT="TCP","2000"(設定本地TCP端口)

第一台:

AT+CIPSTART="TCP","REMOTE IP ADDR","2020" (REMOTEIP ADDR可由對方發SMS

得到)

已經建立連接配接

第二台:

AT+CIPSTART="TCP","REMOTE IP ADDR","3030"

已經建立連接配接

之後任何一方就可以向另外一方發資料(用AT+CIPSEND發送)

也可以用CSD方式建立,具體操作如下:

第一台:

AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置為CSD連接配接,撥17201,使用者名和

密碼皆為172,連接配接速率為9600)

AT+CLPORT="TCP","3030"

AT+CIPSERVER (啟動SERVER功能,開始偵聽3030端口)

AT+CIFSR(擷取本地IP位址)

AT+CLPORT="TCP","3000"

第二台:

AT+CIPCSGP=0,"17201","172","172", 2 (CSD方式,置為CSD連接配接,撥17201,使用者名和

密碼皆為172,連接配接速率為9600)

AT+CLPORT="TCP","2020"

AT+CIPSERVER (啟動SERVER功能,開始偵聽2020端口)

AT+CIFSR(擷取本地IP位址)

AT+CLPORT="TCP","2000"

SIMCOM Application Note for SIM100 TCP/IP AT Commands

8

第一台:

AT+CIPSTART="TCP","REMOTE IP ADDR","2020" (REMOTEIP ADDR可由對方發SMS

得到)

已經建立連接配接

第二台:

AT+CIPSTART="TCP","REMOTE IP ADDR","3030"

已經建立連接配接

之後任何一方就可以向另外一方發資料(用AT+CIPSEND發送)

SIMCOM Application Note for SIM100 TCP/IP AT Commands

9

11. 如何使用SIM100TCP實作多個子產品之間的互相通信

目前SIM100TCP不支援多個TCP同時連接配接,但是可以用UDP方式來實作.可以用子產品啟

動UDP功能,這樣模快就可以接收來自遠端的UDP包,可以通過收到的UDP包擷取發送方的

IP位址和端口号,然後本子產品就可以作出應答,回應一個UDP包,實作互相的通訊.下面是

一個簡單的例子:

假設A,B,C三個子產品要互相通信,可以用以下的方式實作(以GPRS方式為例)

1:A,B,C分别初始化如下:

AT+CIPCSGP=1,"cmnet"(GPRS方式)

AT+CLPORT="UDP","端口号"(設定UDP端口号)

AT+CSTT (啟動TCP任務,成功後傳回OK)

AT+CIICR (激活場景,成功後傳回OK)

AT+CIFSR (獲得本地IP位址)

AT+CIPSTART="UDP","REMOTE IP ADDR","REMOTE PORT"(注冊UDP

連接配接,其中"REMOTE IP ADDR"和"REMOTE PORT"可以随便設定一個,成功後傳回

CONNECT OK)

2:若A要向B發送資料,隻要這樣就可以了:

AT+CIPCLOSE (登出目前UDP連接配接)

AT+CIPSTART="UDP","B的IP位址","B的端口号"(注冊新的UDP連接配接)

(成功後會傳回CONNECTOK和OK)

AT+CIPSEND (發送資料)

若C有資料發給A,則A自動接收到,同時可以獲得C的IP位址和端口号,這樣A就可以

發UDP包給C了,具體過程跟上面類似.

SIMCOM Application Note for SIM100 TCP/IP AT Commands

10

12. TCP連接配接出錯後應該如何處理

若在建立TCP連接配接的過程中出現錯誤或者SERVER斷線,則先用AT+CIPCLOSE關閉

TCP連接配接(本地IP位址不變),然後再重建立立連接配接.若其他時候可以用AT+CIPSHUT關閉

PDP Context(本地IP位址會改變),然後重建立立連接配接.

13. 如何建立一個點對點的CSD連接配接

首先要確定SIM卡已開通CSD業務,直接呼叫對方号碼(資料呼叫,非語音呼叫),對

方用ATA應答,然後會傳回CONNECT 9600,這時候雙方進入完全的透明資料傳輸狀态,雙

方都可以收發資料,發+++後傳回指令态(注意+++的前後0.5秒内必須無資料傳輸才能傳回

指令态),ATO可傳回資料态.ATH可結束本次CSD連接配接.