嵌入式技术william hill官网
直播中

河神大人

9年用户 1537经验值
擅长:电源/新能源
私信 关注
[问答]

使用AT模块建立TCP连接时报超时错误是何原因呢?

求助!!
使用AT模块(EC20)连接测试服务器(服务器正常)
实测可以ping通目标ip
但在建立TCP连接时会报超时错误
if(connect(g_net_data.socket, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
    {
        LOG_E("Connect failed!n");
        return RT_FALSE;
    }
    /* waiting result event from AT URC, the device default connection timeout is 75 seconds, but it set to 10 seconds is convenient to use.*/
    if (ec20_socket_event_recv(device, SET_EVENT(device_socket, 0), 10 * RT_TICK_PER_SECOND, RT_EVENT_FLAG_OR) < 0)
    {
        LOG_E("%s device socket(%d) wait connect result timeout.", device->name, device_socket);
        result = -RT_ETIMEOUT;
        goto __exit;
    }
如下图:SIM卡初始化正常,调试能够正常发出AT+QIOPEN命令,等待应答超时
2.jpg

回帖(9)

mintsy

2023-3-10 11:12:52
你把AT的调试打开,自己先查查
2.jpg
举报

河神大人

2023-3-10 11:13:08
2.jpg
举报

mintsy

2023-3-10 11:13:22
你把“使能打印通信数据的RAW格式”打开,你看你AT命令发的什么,然后有没有返回数据
举报

河神大人

2023-3-10 11:13:33
看起来好像是回复了一个OK??
举报

mintsy

2023-3-10 11:13:39
这一段是AT设备初始化后,rtt用来验证是否能联网的验证程序,连接的是RTT的服务器。至于你自己要测试的代码,并没有显示出来
2.jpg
举报

河神大人

2023-3-10 11:14:00
2.jpg
这段就是我写的连接嘛,看应答是有的,但是驱动给判断了超时 3.jpg


举报

mintsy

2023-3-10 11:14:06
你调试下这个函数中,哪里出错了
2.jpg
举报

河神大人

2023-3-10 11:14:16
if((g_net_data.socket = socket(AF_AT, SOCK_STREAM, 0)) == -1)
    {
        LOG_E("Create socket failed!");
        return RT_FALSE;
    }
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(port);
    server_addr.sin_addr = *((struct in_addr *)host->h_addr);
    rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
    rt_thread_mdelay(5000);
    if(connect(g_net_data.socket, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
    {
        LOG_E("Connect failed!n");
        return RT_FALSE;
    }
是这样走的,没经过那个函数
举报

河神大人

2023-3-10 11:14:23
解决了,感谢!之前调试的把urc_table初始化相关的注释掉了,导致recv数据后匹配不了了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分