使用Arduino开发ESP32(十二):TCP Server

TCP Server按如下方式使用:

1.引用相关库#include <WiFi.h>;
2.声明WiFiServer对象;
3.使用begin方法启动监听;
4.监听客户端连接并处理数据通讯;

相关方法:

WiFiServer(uint16_t port=80, uint8_t max_clients=4)

声明WiFiServer对象(端口号,最大接入客户数量)

WiFiClient available()
WiFiClient accept(){return available();}

尝试建立客户对象

void begin(uint16_t port=0)

服务器启动

void setNoDelay(bool nodelay)

设置是否延时发送:
使用begin方法时会被设置为false,这样服务器会合并小数据包后发送,产生延时;
开启NoDelay可以提高应答速度,但有些情况下会降低总传输效率,需要根据需求设置;

bool getNoDelay()

返回:是否设置了延时发送

bool hasClient()

返回:是否有客户端尝试接入;

size_t write(const uint8_t *data, size_t len)
size_t write(uint8_t data){return write(&data, 1);}

发送数据,发送成功返回发送字节数,失败返回0;
除了用write()方法外也可以用print()等方法发送数据;

void end()
void close()
void stop()

停止服务;

int setTimeout(uint32_t seconds)

设置超时时间;

代码:

#include <WiFi.h>

const char *ssid = "CMCC-678";
const char *password = "密码";

WiFiServer server; //声明服务器对象

void setup()
{
    Serial.begin(115200);   //串口初始化
    Serial.println();

    WiFi.mode(WIFI_STA);
    WiFi.setSleep(false); //关闭STA模式下wifi休眠,提高响应速度
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED)  
    {
        delay(500);
        Serial.print(".");
    }
    Serial.println("Connected");
    Serial.print("IP Address:");
    Serial.println(WiFi.localIP());

    server.begin(2333); //服务器启动,端口号2333
}

void loop()
{
    WiFiClient client = server.available(); //尝试建立客户对象
    if (client) //如果当前客户可用
    {
        Serial.println("[存在客户端连接]");
        String readBuff;    //读取信息暂存
        while (client.connected()) //如果客户端处于连接状态
        {
            if (client.available()) //如果有可读数据
            {
                char c = client.read(); //读取一个字节
                                        //也可以用readLine()等其他方法
                readBuff += c;
                if(c == '\r') //接收到回车符
                {
                    client.print("已收到: " + readBuff); //向客户端发送
                    Serial.println("已收到: " + readBuff); //从串口打印
                    readBuff = "";
                    break; //跳出循环
                }
            }
        }
        client.stop(); //结束当前连接:
        Serial.println("[无客户端连接]");
    }
}

结果:
在这里插入图片描述

  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WLAN是英文WirelessLAN的缩写,就是无线局域网的意思。无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活、建网迅速、个人化等特点。将这一技术应用于电信网的接入网领域,能够方便、灵活地为用户提供网络接入,适合于用户流动性较大、有数据业务需求的公共场所、高端的企业及家庭用户、需要临时建网的场合以及难以采用有线接入方式的环境等 作为全球公认的局域网权威,IEEE802工作组建立的标准在过去二十年内在局域网领域独领风骚。这些协议包括了802.3Ethernet协议、802.5TokenRing协议、802.3z100BASE-T快速以太网协议。在1997年,经过了7年的工作以后,IEEE发布了802.11协议,这也是在无线局域网领域内的第一个国际上被认可的协议。  在1999年9月,他们又提出了802.11b"HighRate"协议,用来对802.11协议进行补充,802.11b在802.11的1Mbps和2Mbps速率下又增加了5.5Mbps和11Mbps两个新的网络吞吐速率。利用802.11b,移动用户能够获得同Ethernet一样的性能、网络吞吐率、可用性。这个基于标准的技术使得管理员可以根据环境选择合适的局域网技术来构造自己的网络,满足他们的商业用户和其他用户的需求。802.11协议主要工作在ISO协议的最低两层上,并在物理层上进行了一些改动,加入了高速数字传输的特性和连接的稳定性。
好的,针对您的问题,可以通过以下步骤实现ARDUINO ESP32自动重连WIFI和TCPSERVER: 1. 首先,需要在代码中定义WIFI和TCPSERVER的参数,包括SSID、密码、服务器IP和端口号。 例如: ``` const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* serverIP = "your_SERVER_IP"; int serverPort = your_SERVER_PORT; ``` 2. 接下来,在setup()函数中,需要连接WIFI并建立TCP连接: 例如: ``` WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("WiFi connected"); WiFiClient client; while (!client.connect(serverIP, serverPort)) { delay(1000); Serial.println("Connecting to server..."); } Serial.println("Server connected"); ``` 3. 为了实现自动重连,需要在loop()函数中添加重连逻辑。首先,需要检查WIFI连接状态和TCP连接状态: 例如: ``` if (WiFi.status() != WL_CONNECTED) { Serial.println("WiFi disconnected"); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Reconnecting to WiFi..."); } Serial.println("WiFi reconnected"); } if (!client.connected()) { Serial.println("Server disconnected"); while (!client.connect(serverIP, serverPort)) { delay(1000); Serial.println("Reconnecting to server..."); } Serial.println("Server reconnected"); } ``` 4. 最后,为了避免频繁重连造成的资源浪费,可以添加一定的时间间隔限制,例如每10秒钟检查一次连接状态: 例如: ``` unsigned long lastCheckTime = 0; unsigned long checkInterval = 10000; void loop() { if (millis() - lastCheckTime > checkInterval) { lastCheckTime = millis(); // Check connection status and reconnect if necessary // ... } // Other code // ... } ``` 通过以上步骤,即可实现ARDUINO ESP32自动重连WIFI和TCPSERVER的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值