乐鑫技术交流
直播中

李鸿洋

10年用户 926经验值
擅长:可编程逻辑
私信 关注
[问答]

请问TCP server如何做到在AP上侦听?

我现在的ESP8266是AP和STA共存模式,我按照sdk及sample中的示例建了一个TCP server,我的原意是这个TCP serer要在AP上侦听的,但是我发现它却是STA接口上侦听,怎么办?

回帖(1)

lalajie

2024-7-13 17:19:56
要让TCP server在ESP8266的AP上侦听,您需要按照以下步骤操作:

1. 确保您的ESP8266处于AP和STA共存模式。在您的代码中,您可能需要设置以下参数:
   ```
   wifi_config_t ap_config;
   wifi_softap_dhcps_stop();
   wifi_softap_set_config(&ap_config);
   wifi_softap_dhcps_start();
   ```

2. 创建TCP server时,确保使用AP接口。您可以使用以下代码创建TCP server:
   ```
   const struct esp_ip_info ap_ip_info;
   wifi_get_ip_info(ESP_IF_WIFI_AP, &ap_ip_info);
   ```

3. 使用ESP8266的AP IP地址和端口号创建TCP server。例如:
   ```
   const char *server_ip = ipaddr_ntoa(&ap_ip_info.ip);
   const uint16_t server_port = 80; // 您可以根据需要更改端口号
   ```

4. 使用`socket`库创建TCP server。例如:
   ```
   int server_socket = socket(AF_INET, SOCK_STREAM, 0);
   if (server_socket == -1) {
       // 错误处理
   }
   ```

5. 设置服务器地址和端口号:
   ```
   struct sockaddr_in server_addr;
   memset(&server_addr, 0, sizeof(server_addr));
   server_addr.sin_family = AF_INET;
   server_addr.sin_port = htons(server_port);
   inet_aton(server_ip, &server_addr.sin_addr);
   ```

6. 绑定socket到服务器地址和端口:
   ```
   if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) != 0) {
       // 错误处理
   }
   ```

7. 监听连接请求:
   ```
   if (listen(server_socket, 5) != 0) {
       // 错误处理
   }
   ```

8. 接受连接请求并处理数据:
   ```
   struct sockaddr_in client_addr;
   socklen_t client_addr_len = sizeof(client_addr);
   int client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &client_addr_len);
   if (client_socket < 0) {
       // 错误处理
   }
   ```

9. 在此处添加您的数据处理逻辑。

10. 关闭socket并释放资源:
    ```
    close(server_socket);
    ```

通过以上步骤,您应该可以在ESP8266的AP上创建并侦听TCP连接。请注意,这里使用的示例代码可能需要根据您的具体需求进行调整。
举报

更多回帖

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