Warm tip: This article is reproduced from serverfault.com, please click

其他-ESP32 WebServer:如何获取入站客户端的ip地址

(其他 - ESP32 WebServer: How to get ip address of incoming clients)

发布于 2020-11-26 16:54:56

借助本教程,我在ESP32上创建了一个简单的WebServer:

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 addess?^^所以多数民众赞成在这里

String ipaddress = /*...*/;
Questioner
Sam
Viewed
11
Juraj 2020-11-28 15:23:14

函数remoteIP将IP地址作为IPAddress对象返回

IPAddress ip = client.remoteIP();

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

Serial.println(ip);

如果你坚持要求将IP作为字符串获取,则IP地址的ESP32核心版本具有toString方法。

String ipaddress = ip.toString();

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

如果你不想使用StreamLib库,则可以使用以下函数(可能不理想)将IPAddress格式化为字符数组。

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);
}