首页
NodeMcu
NodeMcu_ESP8266开发板--TCP Server
NodeMcu_ESP8266简介
NodeMcu_温湿度传感器(DHT11)的使用
esp8266+DHT11温湿传感器 制作web室内温度计
ESP8266NodeMcu网页控制四个LED灯
NodeMcu用网页上传图片来驱动1.44寸TFT屏幕
esp8266使用1.44寸tft屏Arduino模块示例程序
1.44寸TFT屏ST7735使用方法
NodeMcu_ESP8266编程
NodeMcu环境监控+远程控制
NodeMcu实现网页远程控制+温湿度显示
NodeMcu网页控制+温湿度显示+TFT
NodeMcu、ESP8266、ESP32区别
本文档由 内网文摘 发布,转载请注明出处
-
+
首页
NodeMcu_ESP8266开发板--TCP Server
1. 创建TCP server ```cpp WiFiServer server(IPAddress addr, uint16_t port); //创建TCP server //addr server的ip地址 //port server的端口 WiFiServer server(uint16_t port); //创建TCP server //port server的端口 ``` 2. 启动TCP server ```cpp void begin(); //启动TCP server void begin(uint16_t port); //启动TCP server //port server端口号 ``` 3. 关闭延时发送功能 ```cpp void setNoDelay(bool nodelay); //是否禁用 Nagle 算法 //nodelay true表示禁用 Nagle 算法 ``` 注意点:Nagle 算法的目的是通过合并一些小的发送消息,然后一次性发送所有的消息来减少通过网络发送的小数据包的tcp/ip流量。这种方法的缺点是延迟了单个消息的发送,直到一个足够大的包被组装 4. 关闭TCP server ```cpp void close(); //关闭TCP server ``` 5. 停止TCP server ```cpp void stop(); //停止TCP server ``` 注意点:stop()和 close()是同样的功能,所以调用哪一个都没有问题 6. 返回TCP server状态 uint8_t status(); //返回TCP server状态 //返回值:wl_tcp_state tcp状态 wl_tcp_state 包括: CLOSED = 0,// 关闭 LISTEN = 1,// 监听中 SYN_SENT = 2, SYN_RCVD = 3, ESTABLISHED = 4,// 建立连接 FIN_WAIT_1 = 5, FIN_WAIT_2 = 6, CLOSE_WAIT = 7, CLOSING = 8, LAST_ACK = 9, TIME_WAIT = 10 7. 获取有效的wificlient连接 ```cpp WiFiClient available(uint8_t* status = NULL); //获取有效的wificlient连接 //返回值://如果存在有效的wificlient连接,就返回WiFiClient对象,如果没有那就返回一个无效的wificlient(connected等于false,开发者可以通过判断connected() ``` 8. 判断是否有client请求连接 ```cpp bool hasClient();//判断是否有client连接 //返回值:bool 如果有client连接就返回true 注意点:开发者可以通过判断这个函数来判断是否有client连接,然后调用available() 方法来获取连接,这样拿到wificlient之后就可以调用wificlient的方法 ``` 9. 允许最多多少个客户端 WiFiClient serverClients[1]; //定义最多多少个client可以连接本server(一般不要超过4个) 10. serverClients[i] 判断指定序号的客户端是否有效 有效返回True 11. serverClients[i].connected() 判断指定序号的客户端是否还连接着 是 返回True 断开返回false 12. serverClients[i].available() 判断指定客户端是否有可读数据 实例: ```cpp //例子介绍:8266作为WiFiServer端,打开TCP调试助手,模拟TCP Client的请求 #include <ESP8266WiFi.h> const char* ssid = "wifi666"; const char* password = "12345678"; #define MAX_SRV_CLIENTS 2 //做多多少个客户端可以连接 WiFiServer server(23); //创建server 端口号是23 WiFiClient serverClients[MAX_SRV_CLIENTS]; //定义最多多少个client可以连接本server(一般不要超过4个) void setup() { Serial.begin(9600); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.print("\n准备连接到:"); Serial.println(ssid); uint8_t i = 0; while (WiFi.status() != WL_CONNECTED && i++ < 20) { delay(500); } if (i == 21) { Serial.print("没能连接到:"); Serial.println(ssid); return ; } server.begin(); //启动server server.setNoDelay(true);//关闭小包合并包功能,不会延时发送数据 Serial.print("准备好了!使用网络吧 IP是: "); Serial.print(WiFi.localIP()); Serial.println(" 端口是: 23"); } void loop() { uint8_t i; if (server.hasClient()) { //判断是否有新的client请求进来 for (i = 0; i < MAX_SRV_CLIENTS; i++) { //释放旧无效或者断开的client if (!serverClients[i] || !serverClients[i].connected()) { if (!serverClients[i]) { //serverClients[i] 判断指定序号的客户端是否有效 serverClients[i].stop(); //停止指定客户端的连接 } serverClients[i] = server.available();//分配最新的client Serial.print("1个新的客户端: "); Serial.println(i); break; //跳出一层for循环 } } //当达到最大连接数 无法释放无效的client,需要拒绝连接 if (i == MAX_SRV_CLIENTS) { WiFiClient client = server.available(); client.stop(); Serial.println("连接被拒绝 "); } } //检测client发过来的数据 for (i = 0; i < MAX_SRV_CLIENTS; i++) { if (serverClients[i] && serverClients[i].connected()) { if (serverClients[i].available()) { //serverClients[i].available() 判断指定客户端是否有可读数据 while (serverClients[i].available()) { Serial.write(serverClients[i].read()); } } } } if (Serial.available()) { //把串口调试器发过来的数据 发送给client size_t len = Serial.available(); //返回可读数据的长度 uint8_t sbuf[len]; Serial.readBytes(sbuf, len); //push UART data to all connected telnet clients for (i = 0; i < MAX_SRV_CLIENTS; i++) { if (serverClients[i] && serverClients[i].connected()) { serverClients[i].write(sbuf, len);//向客户端发送数据 delay(1); } } } } ``` 原文连接:https://www.cnblogs.com/liming19680104/p/11237199.html
local
2021年10月25日 20:02
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 LocalNetwork
LocalNetwork
是由mrdoc开源
LocalNetwork.cn
修改的在线文档系统,作为个人和小型团队的云笔记、文档和知识库管理工具。
如果此文档给你或你的团队带来了帮助,欢迎支持作者持续投入精力更新和维护!内网文摘 & LocalNetwork
>>>主页
logo
logo
下载Markdown文件
分享
链接
类型
密码
更新密码