1. 如何使用TCP向遠端SERVER傳輸數據
如何使用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命令,返回"$amp;>amp;$quot;後輸入發送的數據,ctrl+z(0x1a)啟動
發送.固定長度的數據發送用AT+CIPSEND=LENGTH命令,返回"> "後輸入發送的數據,
當輸入的數據長度等於LENGTH的時候自動發送,不需結束符.還有一種自動發送方式,先
用AT+CIPATS=,命令設定自動發送的時間,然後用AT+CIPSEND返回"$amp;>amp;$quot;
輸入要發送的數據,等定時到了之後自動發送輸入的數據.發送完成之後返回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","", "80" (連接到SERVER)
4:發送數據
AT+CIPSEND返回"$amp;>amp;$quot;後開始發送數據,ctrl+z啟動發送.
解析域名獲得IP地址
1:先激活一個移動場景
AT+CSTT
AT+CIICR
AT+CIFSR
2:配置DNS
AT+CDNSCFG="211.136.18.171" (以上海為例)
3:解析域名,獲得IP地址
AT+CDNSGIP=""
返回該域名的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連接.
2. 在系統中數據如何發送
從網路設備驅動程序的結構分析可知,Linux網路子系統在發送數據包時,會調用驅動程序提供的hard_start_transmit()函數,該函數用於啟動數據包的發送。在設備初始化的時候,這個函數指針需被初始化以指向設備的xxx_tx ()函數。網路設備驅動完成數據包發送的流程如下:
1)網路設備驅動程序從上層協議傳遞過來的sk_buff參數獲得數據包的有效數據和長度,將有效數據放入臨時緩沖區。
2)對於乙太網,如果有效數據的長度小於乙太網沖突檢測所要求數據幀的最小長度ETH ZLEN,則給臨時緩沖區的末尾填充0。
3)設置硬體的寄存器,驅使網路設備進行數據發送操作。
特別要強調對netif_ stop_queue()的調用,當發送隊列為滿或因其他原因來不及發送當前上層傳下來的數據包時,則調用此函數阻止上層繼續向網路設備驅動傳遞數據包。當忙於發送的數據包被發送完成後,在以TX結束的中斷處理中,應該調用netif_wake_queue ()喚醒被阻塞的上層,以啟動它繼續向網路設備驅動傳送數據包。當數據傳輸超時時,意味著當前的發送操作失敗或硬體已陷入未知狀態,此時,數據包發送超時處理函數xxx _tx _timeout ()將被調用。這個函數也需要調用由Linux內核提供的netif_wake _queue()函數以重新啟動設備發送隊列。
3. NRF24L01怎麼一次發送自定義長度的數據
在回答你的問題之前,我要反問幾個桐者問題。
一、你說的是發送一次數據包的長度?還是完成一次完整通信的數據長度?
二、如果你想的是改動數據包的長度,那好,你寫一封局余薯信郵寄一張400字的方格紙出去,你為什麼要去找能夠自定義的方格紙?比如347格的方格紙?不覺的累么?你知道電腦通信都是一個數據包一個數據包的發么,一個數據包是有固定的大小,哪怕你就是發一個1出去,也有可能是4kb的數據包(打個比方),你知道是為什麼?
你問的這么不清,我回答起來也巨累,不過接下毀激來還是回答問題了
如果是改動數據包的長度,將define 里的txpack 32(NRF的常式一般會設置數據包長32),找到他,把它改成unsigned char型或unsigned int型,寫代碼的時候弄成全局變數就可。
然後就是每一次更改數據包大小的發送,你必須重新初始化一次NRF,不然無法更改。
如果是一次完整通信的數據長度,這個就是你子寫通信協議了。
4. nRF24L01發送數據長度以及收發問題
這個是搜穗純發送數據,最長32位。地址和CRC是發送方自動添加,接收方自動去除,截取純數據保存到內部寄存器,接收方的單片機只要讀取該寄存器即可,該寄侍野存器的長度是32位。其中地址可以通過NRF的寄存器修改;CRC只能通老漏喊過NRF的寄存器設置是8位還是16位,不能設置具體能容。
5. 如何用vfp的mscomm控制項發送長度為一個位元組十六進制數和二進制數的數據.同時如何接收
剛查了一下MSComm控局型如件的output屬性「Output 向傳輸緩沖區寫一個字元串」,應該是該控制項只支持字元型數據,如果你要發送數值型數據,那就只能通過str()函數先轉換,接收後再通過val()函數轉回。如果數據有小數點,要注意這兩個函數的參數設置。
「達到以桐啟一個位元組的租搜長度發送任意一個八位二進制數能表示的數值呢?」,你可以直接把這個八位二進制數作為字元串發送,接收後再根據你需要作相關處理。
6. 232串口通信如何發送很長數據位
將數據位。設激謹圓為8位,將 16位的數。轉為 char * 或者unsigned char * 數組也行,明塌,,,,比晌游如
int a=0x55aa, unsigned char send[2]; send[0]=a&0x00ff; send[1]=(a>>8)&0xff,再發送 send[0]
和 send[1];
7. 串口調試助手按指定數據長度分段發送數據。
可以使用格西烽火來或清實現,鉛喚每一個分段衫激前建立一個條目,每條目可以設置延時,界面如下圖。
8. cc2540怎樣發送可變長度數據包
您好,您這樣:
【1】首先要讓開發板跑 SimpleBLEPeripheral , 這里不是重點, 先不說哈。
【2】然後,把燒錄了「 sniffer_fw_cc2540_usb.hex」 固件的 usb-dongle插入到褲如前pc, 如果沒有安裝驅動, 是要安裝橡州的驅動的, 但是如果你已經安裝了 SmartRF Packet Sniffer 軟體, 那麼驅動就已經默認安裝了。
【3】 運行 SmartRF Packet Sniffer 。
一旦主機和從機連接上後, 到這一行, 抓包就不在顯示了, 這個時候, 如上填入地址, 並選好信道號, 然後再重新復位從機,主機重新連接,這個時候不一定 SmartRF Packet Sniffer 就能顯示到連接後的數據包, 如果不能連接上, 就試試 把 改成 38、 39等等, 多試試幾次, 就會出現下面圖了。
下面用lightblue進行一個char1的讀操作, lightblue讀取到了0x04.(lightblue是ios上很牛的一個軟體, 如果不知道, 可以先看看我先前的文章哈,
http://blog.csdn.net/mzy202/article/details/23600587)
下面用lightblue進行一個char1的寫操作, lightblue寫入0x01.
在實際開發中, 這個抓包還是顯得比較重要的, 比如android4.3的ble, 目前還不是很穩定,這個時候你又不能確定是不是你代碼的問題還是從機的問題, 我們通過抓取空中傳遞的數據包, 就能確定到底是在主機或胡清從機的問題。