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, 目前还不是很稳定,这个时候你又不能确定是不是你代码的问题还是从机的问题, 我们通过抓取空中传递的数据包, 就能确定到底是在主机或胡清从机的问题。