单片机学习小组
直播中

吴藩

9年用户 813经验值
擅长:可编程逻辑
私信 关注

客户端模式是什么?服务器模式又是什么呢

客户端模式是什么?服务器模式又是什么呢?怎样去编写一种服务器模式程序呢?

回帖(1)

孙成红

2022-2-22 14:48:55
客户端模式


连接到网络中,向服务器发送或请求数据

服务器模式


通俗的说,就是8266开一个热点,然后手机连上这个热点可以和它在网页中进行通讯

服务器模式程序


WifiAccessPoint


文件-示例-ESP8266WIFI-WifiAccessPoint

/* 创建Wifi热点提供网站服务 */

#include
#include
#include

#ifndef APSSID
#define APSSID "ESPap"                //wifi名称,可修改
#define APPSK  "thereisnospoon"                //wifi密码,可修改
#endif

const char *ssid = APSSID;
const char *password = APPSK;

ESP8266WebServer server(80);

/*
连上wifi之后,进入浏览器输入192.168.4.1 ,可以直接访问8266的网站服务
*/
void handleRoot() {
  server.send(200, "text/html", "

You are connected

");

}

void setup() {
  delay(1000);
  Serial.begin(115200);
  Serial.println();
  Serial.print("Configuring access point...");
  /* 如果不想设置wifi密码,把下面的password删掉
  像这样:   WiFi.softAP(ssid);
  */
  WiFi.softAP(ssid, password);

  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  server.on("/", handleRoot);
  server.begin();
  Serial.println("HTTP server started");
}

void loop() {
  server.handleClient();
}

连上热点之后访问服务器确实出现了You are connected,为什么呢??
因为 server.on("/", handleRoot);这一句代码表示当服务器根目录被访问到的时候,就调用handleRoot函数
下面做一点小修改,热点控制LED

WifiAccessPoint - LED_BUILTIN


/*
通过浏览器将将灯设置为相反状态,亮就让你灭,灭就让你亮。
每访问一次网站,灯的状态就会发生变化(可刷新重复访问)
*/
#include
#include
#include

#ifndef APSSID
#define APSSID "ESPap"                //wifi名称,可修改
#define APPSK  "thereisnospoon"                //wifi密码,可修改
#endif

const char *ssid = APSSID;
const char *password = APPSK;

ESP8266WebServer server(80);

void handleRoot() {
  server.send(200, "text/html", "

You are connected

");

  digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));  //将灯设置为相反状态,亮就让你灭,灭就让你亮
}

void setup() {
  delay(1000);
  Serial.begin(115200);
  Serial.println();
  Serial.print("Configuring access point...");
  WiFi.softAP(ssid, password);

  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  server.on("/", handleRoot);
  server.begin();
  Serial.println("HTTP server started");

pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  server.handleClient();
}

WifiAccessPoint - GPIO - LED


这样不过瘾吗???你说网页没变啊??
那我就变化一下吧
这里只对上面的代码修改了一处函数,每访问服务器一次就变化一下灯的状态,并读取状态显示在网页中。

void handleRoot() {
  digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));  
  String str = "

You are connected

LED State: " + String(digitalRead(LED_BUILTIN)) ;

    server.send(200, "text/html", str);
}

这里需要说明的是,8266上的LED是负逻辑,就是状态为1为灭灯
但是GPIO上是正逻辑,不信试试一下D6外接LED和电阻,状态为1表示亮

void handleRoot() {
  digitalWrite(D6,!digitalRead(D6));  //将灯设置为相反状态,亮就让你灭,灭就让你亮
  String str = "

You are connected

LED State: " + String(digitalRead(D6)) ;

    server.send(200, "text/html", str);
}

void setup() {
/**************
不变
***/
  pinMode(D6, OUTPUT);
}

404


有人就问啊,网站不是有很多页面吗?那我连上8266访问一下其它页面会怎么样??
试试就试试,你以为我是谁,在地址栏反复刷新太无聊??看一下嘿嘿
地址栏输入192.168.4.1/led,回车Not found: /led
地址栏输入192.168.4.1/io,回车Not found: /io…
辣我想让塔出现404页面怎么搞??

server.onNotFound(handleNotFound);

这个说明当有人企图浏览不存在的网址的时候,就会调用handleNotFound函数,然后我们就可以在函数里定义404页面辣

/*
1.通过浏览器将将外置LED灯设置为相反状态,亮就让你灭,灭就让你亮,每访问一次网站,灯的状态就会发生变化(可刷新重复访问)
2.显示灯的状态
3.增加404页面提示
*/
#include
#include
#include

#ifndef APSSID
#define APSSID "ESPap"
#define APPSK  "123789"
#endif

const char *ssid = APSSID;
const char *password = APPSK;

ESP8266WebServer server(80);

void handleRoot() {
  digitalWrite(D6,!digitalRead(D6));  
  String str = "

You are connected

LED State: " + String(digitalRead(D6)) ;

    server.send(200, "text/html", str);
}

void handleNotFound(){                                        // 当浏览器请求的网络资源无法在服务器找到时,
  server.send(404, "text/plain", "404: Not found,There is nothing");   // NodeMCU将调用此函数。中文的话会乱码-.-
}

void setup() {
  delay(1000);
  Serial.begin(115200);
  Serial.println();
  Serial.print("Configuring access point...");
  WiFi.softAP(ssid,password);

  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  server.on("/", handleRoot);
  server.onNotFound(handleNotFound);
  server.begin();
  Serial.println("HTTP server started");

  pinMode(D6, OUTPUT);
}

void loop() {
  server.handleClient();
}

整蛊专家


有点的网站管理后台通常就是这样的

那我们也给自己写一个假的管理后台吧
192.168.4.1/admin

server.on("/admin", handleadmin);

这个说明说明捏??那就是当有人企图访问网站下的admin目录,就调用handleadmin函数处理这种情况-.-
不信你试试哇,正常情况下会红红的居中显示
This is a fake web, you are cheated -.-!!!

/*
1.通过浏览器将将外置LED灯设置为相反状态,亮就让你灭,灭就让你亮,每访问一次网站,灯的状态就会发生变化(可刷新重复访问)
2.显示灯的状态
3.增加404页面提示
*/
#include
#include
#include

#ifndef APSSID
#define APSSID "ESPap"
#define APPSK  "123789"
#endif

const char *ssid = APSSID;
const char *password = APPSK;

ESP8266WebServer server(80);

void handleRoot() {
  digitalWrite(D6,!digitalRead(D6));  
  String str = "

You are connected

LED State: " + String(digitalRead(D6)) ;

    server.send(200, "text/html", str);
}

void  handleadmin(){
   server.send(200, "text/html", "

This is a fake web, you are cheated -.-!!!!

");

}
void handleNotFound(){                                       
  server.send(404, "text/plain", "404: Not found,There is nothing");   
}

void setup() {
  delay(1000);
  Serial.begin(115200);
  Serial.println();
  Serial.print("Configuring access point...");
  WiFi.softAP(ssid,password);

  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  server.on("/", handleRoot);
  server.on("/admin", handleadmin);
  server.onNotFound(handleNotFound);
  server.begin();
  Serial.println("HTTP server started");

  pinMode(D6, OUTPUT);
}

void loop() {
  server.handleClient();
}
举报

更多回帖

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