AT指令建立TCP/IP 链接,并自收发数据

来源:互联网 发布:linux dhcp服务器搭建 编辑:程序博客网 时间:2024/06/07 01:22

3G模块:华为MU709 MU509

内核版本:3.15

前面说过PPPD拨号及上网,今天说说AT指令建立TCP链接。

代码如下:

int tcp_3g_test(void) 
{
int ret;
char AT[] = "AT\r\n";      //模块上电初始化完成后,发送AT,会回应"ok"
char ATE[] = "ATE0\r\n";     //关闭命令回显
char ATCMEE[] = "AT+CMEE=1\r\n"; //错误返回时,用错误代码代替错误详细文本
//char ATRST[] = "AT^RESET\r\n"; //立即复位模块,通过添加参数,可以延时复位
char ATCURC[] = "AT^CURC=0\r\n"; //关闭模块主动上传的信息,像^RSSI,^MODE,^SRVST,^SMMEMFULL.还会有一些命令自动上传
//char ATDVCFG[] = "AT^DVCFG=1\r\n"; //数据和语音, 数据优先模式
char ATCPIN[] = "AT+CPIN?\r\n";  //检查sim卡是否安装好?
char ATCSQ[] = "AT+CSQ\r\n";   //检查网络信号强弱


//internet service commands,用于向服务器发送TCP/UDP数据
char ATIPINIT[] = "AT^IPINIT=\"3GNET\"\r\n"; //初始化网络连接,能够获取一个IP
char ATIPCHECK[] = "AT^IPINIT?\r\n"; //初始化
char ATLISTEN[]="AT^IPLISTEN=\"TCP\",5000\r\n";//启用TCP监听
char ATIPOPEN[] = "AT^IPOPEN=1,\"TCP\",\"10.0.64.43\",5000,8000\r\n";  //建立TCP link 建立一个远程连接,连接远程服务器。IP地址、端口需要设置成真正的目标地址。
char ATIPOPENCHECK[] = "AT^IPOPEN?\r\n";  //查询当前 link 建立一个远程连接,连接远程服务器。IP地址、端口需要设置成真正的目标地址。
// char ATIPENTRANS[] = "AT^IPENTRANS=1\r\n"; //开启透明传输
char IPSEND1[] = "AT^IPSEND=1, \"this is 3g tcp send test\"\r\n"; //发送数据
char IPSEND2[] = "AT^IPSEND=1, \"this is wang shi zhu 3g tcp send test\"\r\n"; ////发送数据
char IPRECV[] = "AT^IPGETDATA?\r\n"; //数据包接收查询
ret=write_string(AT,__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
return -1;
}
ret=write_string(ATCPIN,__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
return -1;
}

SIM卡正常状态应为


ret=write_string(ATCSQ,__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
return -1;
}

 
if(csq==0||csq==99)
{
return -1;
}

正常情况下信号强度应该在11以上,我这是只插了天线接头,没接天线线体。如果不插天线,2个都是99,这样是无法建立tcp链接的
ret=write_string(ATE,__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
return -1;
}
ret=write_string(ATCMEE,__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
return -1;
}
ret=write_string(ATCURC,__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
return -1;
}
//------------------------------关闭之前的连接-------------------------
    //IpLink=0,可能是本连接断开,“^IPSTATE: 1,0,0”;也可能是网络注册失效,“^IPSTATE: 7,0,2”
    //为了能够重新连接成功,所以,重复发送下面的三条语句。
ret=write_string("AT^IPCLOSE=1\r\n",__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
//return -1;
}
ret=write_string("AT^IPCLOSE=6\r\n",__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
//return -1;
}
ret=write_string("AT^IPCLOSE=7\r\n",__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
//return -1;
}
ret=write_string(ATIPINIT,__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
return -1;
}

初始化网络连接,能够获取一个IP
ret=write_string(ATIPCHECK,__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
return -1;
}

查看获取到的IP


ret=write_string(ATLISTEN,__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
return -1;
}
sprintf(ATIPOPEN,"AT^IPOPEN=1,\"TCP\",%s,5000,8000\r\n",ip_3g);
printf("ATIPOPEN=%s\n", ATIPOPEN);

连接IP,就是上面初始化获取到的第一个IP地址
ret=write_string(ATIPOPEN,__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
return -1;
}

查看当前的链接
ret=write_string(ATIPOPENCHECK,__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
return -1;
}

有2个link,如下所示


ret=write_string(IPSEND1,__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
return -1;
}

发送数据


ret=write_string(IPSEND2,__LINE__);
if(!ret)
{
printf("read at error in %d\n",__LINE__);
return -1;
}

link1发送数据 “this is 3g tcp send test”


link2 接收到数据 如下所示


}

以上就是AT指令建立TCP链接进行自收发数据的过程。


0 0
原创粉丝点击