This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

cc3200 TCP client 模式下,如何接收server回的数据?



TCP socket在 client 模式下发送没有问题,发送完了后,如何实现接收server端回的数据,需要怎么操作?

  • OnAccept执行完,这个ClientSocket就被释放掉了,也话还没有发完,对端就已经掉线了,自然收不到。
    SendBuf后面Sleep(2000)试试看。

  • 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连接.