ESP IDF socket 遇到以及解决 Socket unable to connect: errno 118

看代码:

/*以下代码的一部分是自己封装的库、组件*/
//引脚初始化
gpio_init(2, GPIO_MODE_OUTPUT);

//LED亮
gpio_set_level(2, 1);

//连接网络
WiFi_connect();

//LED灭
gpio_set_level(2, 0);


/*@delay*/



//创建TCP socket
int c_sock = create_sock("192.168.10.100", 8080);

//连接TCP,问题就是这里,灯灭后总是报错Socket unable to connect: errno 118
//118报错信息就是无法 连接/触及 到(192.168.10.100:8080)的意思
sock_connect(c_sock);

sock_send(c_sock, "hello");

解决办法:

 连接WIFI后,不能第一时间去创建socket连接,需要延时,再进行socket通讯;

就在上面/*@delay*/的位置加延时。

我测试了一下,需要900ms以上!

能帮助到的给个♥,我找了一下午的错⑤。


发现要延时的原因了,socket 通讯要在获取到路由器分配 ip 的事件后才能使用,就是注册IP的事件,在事件中放个标志位,等待标志位置位后再进行socket 通讯

static void wifi_event_handler(void* arg, esp_event_base_t event_base,
                                int32_t event_id, void* event_data)
{
    // STA 事件处理
    if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_CONNECTED) {
        // 这时候只是WIFI连接成功,IP还没有分配。
        ESP_LOGI(TAG_STA, "WiFi is connected");
    }else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
        esp_wifi_connect();
        ESP_LOGI(TAG_STA, "WIFI_EVENT_STA_START");
    } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {
        esp_wifi_connect();
    } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
        // 这个时候的分配到了IP,就可以开始socket通讯的。
        connect_flag = 1; // 给上连接标志
        ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
        ESP_LOGI(TAG_STA, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
    }

}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值