ESP8266客户端无法连接自建ESP8266WebServer服务端问题求助
故障原因及修复方案
核心问题1:服务端WiFi模式配置冲突
- 服务端代码中同时设置了
WiFi.mode(WIFI_AP)(热点模式)和WiFi.begin(ssid, password)(连接现有路由器的STA模式),两种模式冲突导致服务端无法正确接入局域网被客户端发现。 - 修复方案:如果两个设备都要接入同一个现有路由器,将服务端的
WiFi.mode(WIFI_AP)改为WiFi.mode(WIFI_STA)即可。如果要让客户端直接连接服务端的热点,删除WiFi.begin相关代码,单独配置AP参数即可。
问题2:客户端WiFi密码拼写错误
- 客户端代码中WiFi密码写为
Wifipassowrd,和服务端的WifiPassword拼写不一致,会导致客户端无法接入同一WiFi网络,自然无法连接服务端。 - 修复方案:统一两端的WiFi SSID和密码配置。
问题3:客户端HTTP请求格式错误
- 客户端构造GET请求时,URL和HTTP协议版本之间没有空格,生成的请求为
GET /update?value=25.0HTTP/1.1,属于非法HTTP请求,就算连接成功也会被服务端拒绝。 - 修复方案:在请求拼接处加空格,改为
client.print(String("GET /") + url + " HTTP/1.1\r\n"。
问题4:客户端连接未正确释放
- 循环中重复使用同一个
WiFiClient对象,上次请求的连接没有释放会导致后续连接失败。 - 修复方案:每次请求结束后调用
client.stop()释放连接。
修正后的核心代码片段
服务端修改部分
// 服务端setup里修改WiFi模式 void setup(){ Serial.begin(115200); WiFi.mode(WIFI_STA); // 改为STA模式接入现有路由器 // 其余代码不变 // 另外把handleIndex里的Content-Type前面的空格去掉 server.send(200,"text/html",Website); }
客户端修改部分
// 首先修正密码拼写 const char* password = "WifiPassword"; void loop() { if(client.connect(host, port)){ String url = "update?value="; url+=String(25.0); // 加空格修正HTTP请求格式 client.print(String("GET /") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); delay(10); Serial.println("Response: "); while(client.available()){ String line = client.readStringUntil('\r'); Serial.print(line); } // 请求结束后关闭连接 client.stop(); }else{ Serial.println("fail"); // 连接失败也释放资源 client.stop(); } // 加延时避免请求过于频繁 delay(1000); }
验证步骤
- 烧录修改后的代码后,先查看服务端串口输出的IP地址,确保和客户端配置的host一致。
- 用手机或电脑连接同一个WiFi,访问服务端IP,看是否能正常打开页面,确认服务端运行正常。
- 再启动客户端,查看串口输出是否能正常收到服务端返回的
Updated响应。
内容的提问来源于stack exchange,提问作者tw.C4444
相关产品推荐
相关产品推荐

