ESP32 WebServer:如何获取传入客户端的IP地址

ESP32 WebServer: How to get ip address of incoming clients

this tutorial 的帮助下,我在我的 ESP32 上创建了一个简单的网络服务器:

void setup() {
  Serial.begin(115200);

  // Connect to Wi-Fi network with SSID and password
  WiFi.softAP(ssid, password);

  IPAddress IP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(IP); //IP address of my ESP32
  
  server.begin();
}
void loop(){
  WiFiClient client = server.available();   // Listen for incoming clients

  if (client) {                             // If a new client connects
    Serial.println("New Client");           // print a message out in the serial port
    //...
  }
}

如何获取此连接客户端的 ip 地址?^^ 大概就是这样

String ipaddress = /*...*/;

函数remoteIP returns the IP address as IPAddress对象。

IPAddress ip = client.remoteIP();

IPAddress 实现了 Printable,因此它可以与 println 一起使用。

Serial.println(ip);

如果硬要获取IP为String,ESP32核心版的IPAddress有toString方法

String ipaddress = ip.toString();

没有将 IPAddress 对象打印到字符数组的函数。您可以使用我的 StreamLib 中的 CStringBuilder class 将 IPAddress 打印到字符数组。 CStringBuilder 允许使用 Arduino Stream class 函数填充字符数组。 StreamLib 库位于库管理器中。

如果您不想使用 StreamLib 库,这里有一个(可能不理想的)函数可以将 IP 地址格式化为字符数组。

void ip2str(const IPAddress& ip, char* s) {
  itoa(ip[0], s, 10);
  size_t l = strlen(s);
  s[l] = '.';
  itoa(ip[1], s + l + 1, 10);
  l = strlen(s);
  s[l] = '.';
  itoa(ip[2], s + l + 1, 10);
  l = strlen(s);
  s[l] = '.';
  itoa(ip[3], s + l + 1, 10);
}