更改

跳转至: 导航搜索

NB101软件设计手册

删除4,428字节2019年2月17日 (日) 22:34
TCP数据收发
|<length>,<nowiki><data></nowiki>
|模块收到的数据长度和数据。例如:<code>696F7478782E7564703A313233</code>,对应字符串为:<code>iotxx.udp:123</code>
|-
|<remaining_length>
|剩余待读数据长度。
|}
 
== 使用TCP协议通信 ==
TCP协议与UDP协议类似,NB模块作为TCP的客户端,连接TCP的服务端,连接成功后可以收发数据。
 
为了方便测试,我们在云平台上启用了一个TCP测试服务器,无论发任何数据,在3秒后,会加上前缀字符串返回数据。注意,使用电信卡的用户很可能无法与我们的服务器通信。因为电信NB网络有定向访问的限制。
 
BC95、BC35均支持TCP协议,BC95不支持。
{| class="wikitable"
!接口
!功能
|-
|TCP测试服务器:115.29.240.46,端口号:9001
|9001端口时刻监听客户端,收到数据后,加上“iotxx.tcp”前缀字符串,然后延时3s后返回给客户端。
|}
 
=== 创建TCP客户端 ===
需要先创建一个socket,指定socket类型为TCP,并且指定一个本地端口。<syntaxhighlight lang="bash">
#创建 TCP Socket
AT+NSOCR=STREAM,6,4000,1
 
#若成功返回
1
OK
#若失败,返回错误ERROR,当开启AT+CMEE=1时,会返回详细错误
ERROR 或 +CME ERROR: 4
 
 
</syntaxhighlight>创建socket的指令格式为:<code>AT+NSOCR=<type>,<protocol>,<listen-port>[,<receive control>]</code>
{| class="wikitable"
!参数
!说明
|-
|<type>
|TCP协议固定取值为STREAM
|-
|<protocol>
|Socket通信协议,TCP协议固定取值为6
|-
|<listen-port>
|本地监听端口,不是远程TCPServer的端口。示例中取值4000。
BC95模块支持创建7路Socket,若再次创建socket,本地端口请+1,注意不要和已创建的重复即可。
|}返回格式为:
 
<socket-id>
 
OK
{| class="wikitable"
!参数
!说明
|-
|<socket-id>
|刚刚创建的Socket ID,后续通信需要携带此ID,需要记录。例如上述命令返回的socket Id为1
|}
 
=== 连接TCP服务器 ===
TCP协议比UDP协议多一个连接步骤,调用一下命令连接TCP服务器。<syntaxhighlight lang="bash">
#连接TCP服务器
AT+NSOCO=1,115.29.240.46,9001
 
#模块返回
OK
 
 
</syntaxhighlight>指令格式:AT+NSOCO=<socket-id>,<remote_addr>,<remote_port>
{| class="wikitable"
!参数
!说明
|-
|<socket-id>
|刚刚创建的Socket ID,后续通信需要携带此ID,需要记录。例如上述命令返回的socket Id为1
|-
|<remote_addr>,<remote_port>
|TCP服务器地址和端口,例如我们的测试服务器:<code>115.29.240.46:9001</code>
|}
 
=== TCP数据收发 ===
向TCP服务器发送数据,例如字符串123<syntaxhighlight lang="bash">
#连接TCP服务器
AT+NSOSD=1,3,313233
 
#模块返回
1,3
OK
 
 
</syntaxhighlight>指令格式:AT+NSOSD=<socket-id>,<length>,<nowiki><data></nowiki>
{| class="wikitable"
!参数
!说明
|-
|<socket-id>
|socket通信id
|-
|<length>,<nowiki><data></nowiki>
|待发送数据和数据长度,data格式为16进制,例如发送字符串123,则length是3,data是313233
|}
 
数据发成成功后,大约3秒后收到测试服务下发的数据。<syntaxhighlight lang="bash">
#模块返回
+NSONMI:1,13
</syntaxhighlight>命令格式为:<code>+NSONMI:<socket-id>,<length></code>
{| class="wikitable"
!参数
!说明
|-
|<socket-id>
|socket通信编号
|-
|<length>
|已收到的数据长度
例如返回:0,13,则表示,Socket 0通道收到了13个字节数据。此刻可以调用读指令,将数据读出来。
|}此时,我们需要把已模块已收到的数据读出来。
 
<syntaxhighlight lang="bash">
#将已缓存的数据读出来
AT+NSORF=1,13
#模块返回
1,115.29.240.46,9001,13,696F7478782E7564703A313233,0
</syntaxhighlight>读指令格式为:<code>AT+NSORF=<socket-id>,<req_length></code>
{| class="wikitable"
!参数
!说明
|-
|<socket-id>
|socket通信编号
|-
|<req_length>
|要读取的数据长度,当req_length大于+NSONMI指令返回的长度时,返回+NSONMI的实际长度。若req_length小于+NSONMI指令返回的长度时,将只返回req_length长度的数据。       
|}
 
模块返回的数据格式为:<code><socket-id>,<remote_addr>,<remote_port>,<length>,<nowiki><data>,<remaining_length></nowiki></code>
{| class="wikitable"
!参数
!说明
|-
|<socket-id>
|socket通信编号
|-
|<ip_addr>,<port>
|发送方的服务器ip地址和端口号。例如我们的UDP测试服务器:<code>115.29.240.46:9001</code>
|-
|<length>,<nowiki><data></nowiki>
|模块收到的数据长度和数据。例如:696F7478782E7463703A313233,对应字符串为:<code>iotxx.tcp:123</code>
|-
|<remaining_length>
2,367
个编辑

本PDF由谷雨文档中心自动生成,点击下方链接阅读最新内容。

取自“http://doc.iotxx.com/特殊:移动版差异/1570

导航菜单