ESP8266在STA TCP-Client模式下,连接服务器不成功atk_8266返回连接成功

esp8266没连接到服务器返回连接上的错误原因解决办法。

在连接上路由器后延时2s在连接服务器。

    u8 *p = NULL;
    u8 ipbuf[16];     //IP缓存
    int t = 5;  
    // 检测esp8266模块是否存在
    t = 5;
    while (atk_8266_send_cmd("AT","OK",20) && --t) // 等待esp8266就绪
    {
        atk_8266_quit_trans();    // 退出透传
        atk_8266_send_cmd("AT+CIPMODE=0","OK",200);  // 关闭透传模式    
        delay_ms(800);            
    }
    if (t <= 0)
    {
        return 1;                 // 未检测到模块
    }
    t = 5;
    while (atk_8266_send_cmd("ATE0","OK",20) && --t);  // 关闭回显
    if (t <= 0)
    {
        return 1;                 // 关闭回显失败
    }
    delay_ms(10);
    atk_8266_at_response(1); // 检查ATK-ESP8266模块发送过来的数据,及时上传给电脑
    atk_8266_send_cmd("AT+CWMODE=1","OK",50);    // 设置WIFI STA 模式
    atk_8266_send_cmd("AT+RST","OK",20);
    delay_ms(1000);         //延时3S等待重启成功
    delay_ms(1000);
    delay_ms(1000);
    delay_ms(1000);
    p = mymalloc(SRAMIN, 32);
    
    // 设置连接到的WIFI网络名称/加密方式/密码,这几个参数需要根据您自己的路由器设置进行修改!! 
    sprintf((char *)p, "AT+CWJAP=\"%s\",\"%s\"", wifista_ssid, wifista_password);// 设置无线参数:ssid,密码
    t = 5;
    while(atk_8266_send_cmd(p,"WIFI GOT IP",300) && --t);                    // 连接目标路由器,并且获得IP
    if (t <= 0)
    {
        myfree(SRAMIN, p);        // 释放内存
        return 2;                 // 连接路由器失败
    }
    delay_ms(1000);
    delay_ms(1000);    
    delay_ms(100);
    atk_8266_at_response(1);
    sprintf((char*)ipbuf,"192.168.43.228");
    atk_8266_send_cmd("AT+CIPMUX=0","OK",20);   // 0:单连接,1:多连接
    sprintf((char*)p,"AT+CIPSTART=\"TCP\",\"%s\",%s",ipbuf,(u8*)portnum);
    t = 5;
    while(atk_8266_send_cmd(p,"OK",200) && --t) // 连接server
    {
        delay_ms(800);
    }
    if (t <= 0) 
    {
        myfree(SRAMIN, p);        // 释放内存
        return 3;                 // 连接Server失败
    }
    atk_8266_send_cmd("AT+CIPMODE=1","OK",200);      // 传输模式为:透传
    USART3_RX_STA = 0;    
    myfree(SRAMIN, p);        // 释放内存
    return 0;                 // 连接server成功

 

ESP8266STA模式连接TCP服务器时,通常情况下,ESP8266作为客户端会使用一个随机分配的端口号与服务器通信。这是因为大多数操作系统和网络协议栈会为出站连接自动选择一个临时端口(ephemeral port)。 如果需要指定ESP8266上的客户端端口号,你可以通过编程使用ESP8266的AT指令集或者在其支持的各种开发平台上(例如Arduino)设置源端口。以下是一个基本的步骤概述: 1. 初始化ESP8266模块并连接到无线网络。 2. 使用TCP客户端的库函数或AT指令创建一个TCP连接。 3. 在创建连接的函数或指令中指定客户端的本地端口号。 以Arduino平台为例,如果你使用的是`WiFiClient`库,你可以这样指定本地端口号: ```cpp WiFiClient client; // 使用指定的本地端口号进行连接 if (client.connect("serverIP", 23)) { // 23是TCP服务器端口号 client.print("GET / HTTP/1.1\r\n"); client.print("Host: serverIP\r\n"); client.print("Connection: close\r\n\r\n"); } else { // 连接失败处理 } // 在连接成功后,你可以这样指定要监听的本地端口 client.setLocalPort(1234); // 1234是你要指定的本地端口号 ``` 在使用AT指令的情况下,你可能需要使用类似于`AT+CIPSTART`的指令来指定端口号。 重要的是要注意,你指定的端口必须是可用的,且不会与同一设备上的其他服务冲突。另外,如果服务器端没有适当的防火墙规则或网络策略来允许来自ESP8266指定端口的入站连接,即使你成功地指定了端口号,连接也可能失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值