【Feedback】使用 rtos_sdk, 连接远程服务器成功之后,远程服务器有时会重启,如何编写程序使得可以自动重连远程服务器

dearwind153
Posts: 49
Joined: Sun Feb 28, 2016 7:47 pm

【Feedback】使用 rtos_sdk, 连接远程服务器成功之后,远程服务器有时会重启,如何编写程序使得可以自动重连远程服务器

Postby dearwind153 » Wed Apr 13, 2016 12:41 am

1. 使用 rtos_sdk, 连接远程服务器成功,但远程服务器有时会重启,如何编写程序使得可以自动重连

2. 查看了一下 non_sdk的例程中 使用 espconn_gethostbyname(pespconn, ESP_DOMAIN, &esp_server_ip, user_dns_found);

其中user_dns_found()为回调函数,

Code: Select all

LOCAL void user_dns_found(const char *name, ip_addr_t *ipaddr, void *arg)
{
    struct espconn *pespconn = (struct espconn *)arg;

    if (ipaddr == NULL)
   {
        printf("user_esp_platform_dns_found NULL\r\n");

        if (++device_recon_count == 5)
      {
            device_status = DEVICE_CONNECT_SERVER_FAIL;
            user_reset_mode();
        }

        return;
    }

    printf("user_dns_found() %d.%d.%d.%d\n",
            *((uint8 *)&ipaddr->addr),     *((uint8 *)&ipaddr->addr + 1),
            *((uint8 *)&ipaddr->addr + 2), *((uint8 *)&ipaddr->addr + 3));

    if (esp_server_ip.addr == 0 && ipaddr->addr != 0)
   {
        esp_server_ip.addr = ipaddr->addr;
        memcpy(pespconn->proto.tcp->remote_ip, &ipaddr->addr, 4);

        pespconn->proto.tcp->local_port = espconn_port();

        pespconn->proto.tcp->remote_port = 8091;
        printf("remote port: %d\n",pespconn->proto.tcp->remote_port);

        espconn_regist_connectcb(pespconn, user_connect_cb);
        espconn_regist_disconcb(pespconn, user_discon_cb);
        espconn_regist_reconcb(pespconn, user_recon_cb);
        user_connect(pespconn);
    }
}

Code: Select all

LOCAL void user_connect_cb(void *arg)
{
    struct espconn *pespconn = arg;

    printf("user_connect_cb\r\n");
    if (wifi_get_opmode() ==  STATIONAP_MODE )
   {
        wifi_set_opmode(STATION_MODE);
    }

    device_recon_count = 0;
    espconn_regist_recvcb(pespconn, user_recv_cb);
    espconn_regist_sentcb(pespconn, user_sent_cb);
    user_sent_register_id(pespconn);
}

Code: Select all

LOCAL void user_recon_cb(void *arg, sint8 err)
{
    struct espconn *pespconn = (struct espconn *)arg;

    printf("user_recon_cb\r\n");

    if (++device_recon_count == 5)
   {
        device_status = DEVICE_CONNECT_SERVER_FAIL;
        user_reset_mode();
    }

   xTaskCreate(user_recon_task, "user_recon_task", 256, pespconn, 2, NULL);
}

Code: Select all

LOCAL void user_recon_task(void *arg)
{
    struct espconn *pespconn = arg;

   while(1)
   {
      vTaskDelay( 1000 / portTICK_RATE_MS );
       printf("user_recon_task()\r\n");
       user_reconnect(pespconn);
      if(user_conn.state == ESPCONN_CONNECT)//Èç¹ûÁ¬½Ó³É¹¦ÔòÌø³ö
      {
         break;
      }
   }
   vTaskDelete(NULL);
}


3. 在rtos_sdk上操作实际, 已经连接好远程服务器,但远程服务器重启后,无法自动重连远程服务器


4. 请问是否有具体的方法先断开远程服务器再新连接远程服务器,有没有具体的实现步骤谢谢,请解答。

ESP_Rubin
Posts: 222
Joined: Wed Jun 29, 2016 11:59 am

【Feedback】Re: 使用 rtos_sdk, 连接远程服务器成功之后,远程服务器有时会重启,如何编写程序使得可以自动重连远程服务器

Postby ESP_Rubin » Fri Jul 01, 2016 10:05 am

您使用的是哪个版本的SDK?远端服务器是谁的?两者之间的通讯方式是什么?

按照您目前的说法,8266与路由器应该是处于链接状态,此时8266能否ping通其他的外网,比如baidu?

如果能ping通,需要你这边查一下8266在与服务器建立链接过程中,应用层到底卡在哪里了

Who is online

Users browsing this forum: Bryantpoirm, HenryCot, Henryionic, MSN [Bot] and 6 guests