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