国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++集群聊天服務(wù)器 網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊+CMake構(gòu)建項(xiàng)目 筆記 (上)

這篇具有很好參考價(jià)值的文章主要介紹了C++集群聊天服務(wù)器 網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊+CMake構(gòu)建項(xiàng)目 筆記 (上)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

跟著施磊老師做C++項(xiàng)目,施磊老師_騰訊課堂 (qq.com)

C++集群聊天服務(wù)器 網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊+CMake構(gòu)建項(xiàng)目 筆記 (上),CMake 筆記,網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊,c++,服務(wù)器,cmake,json

一、網(wǎng)絡(luò)模塊ChatServer

  • chatserver.hpp
#ifndef CHATSERVER_H
#define CHATSERVER_H

#include <muduo/net/TcpServer.h>
#include <muduo/net/EventLoop.h>
using namespace muduo;
using namespace muduo::net;

// 聊天服務(wù)器的主類
class ChatServer {
public:
    // 初始化聊天服務(wù)器對(duì)象
    ChatServer(EventLoop* loop,const InetAddress& listenAddr,const string& nameArg);
    // 啟動(dòng)服務(wù)
    void start(); 
private:
    // 上報(bào)鏈接相關(guān)信息的回調(diào)函數(shù)
    void onConnection(const TcpConnectionPtr& conn);
    // 上報(bào)讀寫(xiě)事件相關(guān)信息的回調(diào)函數(shù)
    void onMessage(const TcpConnectionPtr& conn,Buffer* buffer,Timestamp time);
    TcpServer m_server; // 組合的muduo庫(kù),實(shí)現(xiàn)服務(wù)器功能的類對(duì)象
    EventLoop *m_loop;  // 指向事件循環(huán)的指針
};

#endif
  • chatserver.cpp
#include "chatserver.hpp"
#include "chatservice.hpp"
#include "json.hpp"
#include <functional>
#include <string>
#include <iostream>
using namespace std;
using namespace placeholders;
using json = nlohmann::json;

ChatServer::ChatServer(EventLoop *loop, const InetAddress &listenAddr, const string &nameArg)
    : m_server(loop, listenAddr, nameArg), m_loop(loop) {
    // 注冊(cè)鏈接回調(diào)
    m_server.setConnectionCallback(std::bind(&ChatServer::onConnection, this, _1));
    // 注冊(cè)消息回調(diào)
    m_server.setMessageCallback(std::bind(&ChatServer::onMessage, this, _1, _2, _3));
    // 設(shè)置線程數(shù)量
    m_server.setThreadNum(4);
}

// 啟動(dòng)服務(wù)
void ChatServer::start() {
    m_server.start();
}

// 上報(bào)鏈接相關(guān)信息的回調(diào)函數(shù)
void ChatServer::onConnection(const TcpConnectionPtr &conn) {
    // 客戶端斷開(kāi)連接
    if(!conn->connected()) {
        conn->shutdown();// 釋放socket fd資源
    }
}

// 上報(bào)讀寫(xiě)事件相關(guān)信息的回調(diào)函數(shù)
void ChatServer::onMessage(const TcpConnectionPtr &conn, Buffer *buffer, Timestamp time) {
    string buf = buffer->retrieveAllAsString();
    
    std::cout<<"buf: "<<buf.c_str()<<std::endl;
    // 數(shù)據(jù)的反序列化
    json js = json::parse(buf);
    // 達(dá)到的目的:完全解耦網(wǎng)絡(luò)模塊的代碼和業(yè)務(wù)模塊的代碼
    // 通過(guò)js["msgid"] 獲取 => 業(yè)務(wù)handler => conn js time
    auto msghandler = ChatService::getInstance()->getHandler(js["msgid"].get<int>());
    // 回調(diào)消息綁定好的事件處理器,來(lái)執(zhí)行相應(yīng)的業(yè)務(wù)處理
    msghandler(conn,js,time);
}

json里邊會(huì)包含一個(gè)msgid.由于客戶端和服務(wù)器通信收發(fā)消息,需要判斷這個(gè)消息是屬于哪種業(yè)務(wù)的,就需要一個(gè)業(yè)務(wù)的標(biāo)識(shí),所以就用msgid來(lái)表示業(yè)務(wù)的標(biāo)識(shí).在onMessage函數(shù)中,并不想出現(xiàn)。

當(dāng)有登錄業(yè)務(wù)需求就調(diào)用相應(yīng)的服務(wù)登錄方法,當(dāng)有注冊(cè)業(yè)務(wù)需求就調(diào)用相應(yīng)的服務(wù)注冊(cè)方法,這樣就用到if...else,或者switch case,但這種方式是直接調(diào)用服務(wù)層的方法,就把網(wǎng)絡(luò)模塊的代碼和業(yè)務(wù)模塊的代碼給強(qiáng)耦合一起了,這不是好的方法.

方法二:每一個(gè)消息都有一個(gè)msgid(一個(gè)消息id映射一個(gè)事件處理),事先給它綁定一個(gè)回調(diào)操作,讓一個(gè)id對(duì)應(yīng)一個(gè)操作.不管具體做什么業(yè)務(wù),并不會(huì)直接調(diào)用業(yè)務(wù)模塊的相關(guān)的方法.

利用OOP回調(diào)思想,要想解耦模塊之間的關(guān)系,一般有兩種方法,一種就是使用基于面向接口的編程,在C++里邊的"接口"可以理解為抽象基類.那也就是面向抽象基類的編程.另一種就是基于回調(diào)函數(shù)

這里使用基于回調(diào)函數(shù)來(lái)實(shí)現(xiàn),m_msgHandlerMap存儲(chǔ)消息id和其對(duì)應(yīng)的業(yè)務(wù)處理方法.注冊(cè)消息以及對(duì)應(yīng)的Handler回調(diào)操作,就是把消息id對(duì)應(yīng)的事件處理器給綁定了,LOGIN_MSG綁定的是login處理登錄業(yè)務(wù),REG_MSG綁定的是reg處理注冊(cè)業(yè)務(wù).

ChatService單例對(duì)象通過(guò)js["msgid"] 獲取消息對(duì)應(yīng)的處理器(業(yè)務(wù)handler)msghandler,由于回調(diào)消息綁定了事件處理器,可用它來(lái)執(zhí)行相應(yīng)的業(yè)務(wù)處理-->msghandler(conn,js,time);

二、業(yè)務(wù)模塊ChatService

  • public.hpp
#ifndef PUBLIC_H
#define PUBLIC_H
/*
    server和client的公共文件
*/
enum EnMsgType {
    LOGIN_MSG = 1, // 登錄消息
    REG_MSG // 注冊(cè)消息
};
#endif // PUBLIC_H
  • chatservice.hpp
#ifndef CHATSERVICE_H
#define CHATSERVICE_H

#include <muduo/net/TcpConnection.h>
#include <unordered_map>
#include <functional>
using namespace std;
using namespace muduo;
using namespace muduo::net;

#include "json.hpp"
using json = nlohmann::json;

// 表示處理消息的事件回調(diào)方法類型
using MsgHandler = std::function<void(const TcpConnectionPtr& conn,json& js,Timestamp)>;

// 聊天服務(wù)器業(yè)務(wù)類
class ChatService {
public:
    // 獲取單例對(duì)象的接口函數(shù)
    static ChatService* getInstance();
    // 處理登錄業(yè)務(wù)
    void login(const TcpConnectionPtr& conn,json& js,Timestamp time); 
    // 處理注冊(cè)業(yè)務(wù)(register)
    void reg(const TcpConnectionPtr& conn,json& js,Timestamp time); 
    // 獲取消息對(duì)應(yīng)的處理器
    MsgHandler getHandler(int msgid);

    ChatService(const ChatService&) = delete;
    ChatService& operator=(const ChatService&) = delete;
private:
    // 注冊(cè)消息以及對(duì)應(yīng)的Handler回調(diào)操作
    ChatService();
    // 存儲(chǔ)消息id和其對(duì)應(yīng)的業(yè)務(wù)處理方法
    unordered_map<int,MsgHandler> m_msgHandlerMap;
};

#endif // CHATSERVICE_H
  • chatservice.cpp
#include "chatservice.hpp"
#include "public.hpp"
#include <muduo/base/Logging.h>
using namespace muduo;

// 獲取單例對(duì)象的接口函數(shù) 線程安全的單例對(duì)象
ChatService* ChatService::getInstance() {
    static ChatService service;
    return &service;
}

// 注冊(cè)消息以及對(duì)應(yīng)的Handler回調(diào)操作
ChatService::ChatService() {
    m_msgHandlerMap.insert({LOGIN_MSG,std::bind(&ChatService::login, this, _1, _2, _3)});  
    m_msgHandlerMap.insert({REG_MSG,std::bind(&ChatService::reg, this, _1, _2, _3)});  
}

// 處理登錄業(yè)務(wù)
void ChatService::login(const TcpConnectionPtr &conn, json &js, Timestamp time) {
    LOG_INFO << "do login service!!!";
}

// 處理注冊(cè)業(yè)務(wù)
void ChatService::reg(const TcpConnectionPtr &conn, json &js, Timestamp time) {
    LOG_INFO << "do reg service!!!";
}

// 獲取消息對(duì)應(yīng)的處理器
MsgHandler ChatService::getHandler(int msgid) {
    // 記錄錯(cuò)誤日志,msgid沒(méi)有對(duì)應(yīng)的事件處理回調(diào)
    auto it = m_msgHandlerMap.find(msgid);
    if(it == m_msgHandlerMap.end()) {
        // 返回一個(gè)默認(rèn)的處理器,空操作
        return [=](const TcpConnectionPtr &conn, json &js, Timestamp) {
            LOG_ERROR << "msgid:" << msgid << " can not find handler!";
        };
    }
    else {
        return m_msgHandlerMap[msgid];
    }
}

三、src/server目錄下的main.cpp

#include "chatserver.hpp"
#include <iostream>
using namespace std;
int main() {
    EventLoop loop;
    InetAddress addr("127.0.0.1", 6000);
    ChatServer server(&loop, addr, "ChatServer");
    server.start();
    loop.loop(); // 啟動(dòng)事件循環(huán)
    return 0;
}

四、thirdparty目錄下是json.hpp

下載:GitHub - nlohmann/json: JSON for Modern C++

在single_include/nlohmann里頭有一個(gè)json.hpp,把它放到我們的項(xiàng)目中就可以了

五、CMake構(gòu)建項(xiàng)目

(1)在src/server目錄中的CMakeLists.txt

# 定義了一個(gè)SRC_LIST變量 包含了該目錄下所有的源文件
aux_source_directory(. SRC_LIST)
# 指定生成可執(zhí)行文件
add_executable(ChatServer ${SRC_LIST})
# 指定可執(zhí)行文件鏈接時(shí)需要依賴的庫(kù)文件
target_link_libraries(ChatServer muduo_net muduo_base pthread)

(2)在src目錄下的CMakeLists.txt

add_subdirectory(server)

(3)與include和src,以及thirdparty同級(jí)目錄的CMakeLists.txt

cmake_minimum_required(VERSION 3.28.0)
project(chat)

# 配置編譯選項(xiàng)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g)

# 配置可執(zhí)行文件生成路徑
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

# 配置頭文件搜索路徑
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/include/server)
include_directories(${PROJECT_SOURCE_DIR}/thirdparty)

# 加載子目錄
add_subdirectory(src)

在此目錄下打開(kāi)終端,執(zhí)行命令:

cmake -B build
cmake --build build

接著執(zhí)行

./bin/ChatServer

打開(kāi)另一個(gè)終端,執(zhí)行

telnet 127.0.0.1 6000
輸入以下內(nèi)容進(jìn)行測(cè)試:
{"msgid":1}
{"msgid":2}

C++集群聊天服務(wù)器 網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊+CMake構(gòu)建項(xiàng)目 筆記 (上),CMake 筆記,網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊,c++,服務(wù)器,cmake,json

C++集群聊天服務(wù)器 網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊+CMake構(gòu)建項(xiàng)目 筆記 (上),CMake 筆記,網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊,c++,服務(wù)器,cmake,json

七、點(diǎn)對(duì)點(diǎn)聊天業(yè)務(wù)代碼和測(cè)試

在public.hpp中添加ONE_CHAT_MSG, // 聊天消息

#ifndef PUBLIC_H
#define PUBLIC_H
/*
    server和client的公共文件
*/
enum EnMsgType {
    LOGIN_MSG = 1, // 登錄消息
    LOGIN_MSG_ACK, // 登錄響應(yīng)消息
    REG_MSG, // 注冊(cè)消息
    REG_MSG_ACK, // 注冊(cè)響應(yīng)消息
    ONE_CHAT_MSG, // 聊天消息
};
#endif // PUBLIC_H

在ChatService.hpp中添加一對(duì)一聊天業(yè)務(wù)函數(shù)聲明

public:
    // 一對(duì)一聊天業(yè)務(wù)
    void oneChat(const TcpConnectionPtr& conn,json& js,Timestamp time);

?在ChatService.cpp中實(shí)現(xiàn)一對(duì)一聊天業(yè)務(wù)函數(shù)

// 一對(duì)一聊天業(yè)務(wù)
void ChatService::oneChat(const TcpConnectionPtr &conn, json &js, Timestamp time) {
    int toid = js["to"].get<int>();
    {
        lock_guard<mutex> lock(m_connMutex);
        auto it = m_userConnMap.find(toid);
        if(it != m_userConnMap.end()) {
            // toid在線,轉(zhuǎn)發(fā)消息  服務(wù)器主動(dòng)推送消息給toid用戶
            it->second->send(js.dump());
            return;
        }
    }
    // toid不在線,存儲(chǔ)離線消息
    // ...(待續(xù)寫(xiě))
}

登錄heheda和Tom賬號(hào)?

C++集群聊天服務(wù)器 網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊+CMake構(gòu)建項(xiàng)目 筆記 (上),CMake 筆記,網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊,c++,服務(wù)器,cmake,json?C++集群聊天服務(wù)器 網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊+CMake構(gòu)建項(xiàng)目 筆記 (上),CMake 筆記,網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊,c++,服務(wù)器,cmake,json

在heheda賬號(hào)中發(fā)送:
{"msgid":5,"id":1,"from":"heheda","to":2,"msg":"hello,I am Heheda!"}
于是,Tom賬號(hào)收到
{"from":"heheda","id":1,"msg":"hello,I am Heheda!","msgid":5,"to":2}


在Tom賬號(hào)中發(fā)送:
{"msgid":5,"id":2,"from":"Tom","to":1,"msg":"hello,I am Tom!"}
于是,heheda賬號(hào)收到
{"from":"Tom","id":2,"msg":"hello,I am Tom!","msgid":5,"to":1}

C++集群聊天服務(wù)器 網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊+CMake構(gòu)建項(xiàng)目 筆記 (上),CMake 筆記,網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊,c++,服務(wù)器,cmake,json

糾正:?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-828943.html

把這句  int toid = js["to"].get<int>();

改成    int toid = js["toid"].get<int>();

到了這里,關(guān)于C++集群聊天服務(wù)器 網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊+CMake構(gòu)建項(xiàng)目 筆記 (上)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++項(xiàng)目——集群聊天服務(wù)器項(xiàng)目(一)項(xiàng)目介紹、環(huán)境搭建、Boost庫(kù)安裝、Muduo庫(kù)安裝、Linux與vscode配置

    C++項(xiàng)目——集群聊天服務(wù)器項(xiàng)目(一)項(xiàng)目介紹、環(huán)境搭建、Boost庫(kù)安裝、Muduo庫(kù)安裝、Linux與vscode配置

    今天開(kāi)始想更新一個(gè)C++項(xiàng)目,實(shí)現(xiàn)一個(gè) 支持跨服務(wù)器通信、支持負(fù)載均衡的集群聊天服務(wù)器項(xiàng)目 。項(xiàng)目會(huì)應(yīng)用muduo網(wǎng)絡(luò)庫(kù)、CMake編譯、MySQL數(shù)據(jù)庫(kù)、JSon序列化與反序列化、Redis消息訂閱模式以及Nginx負(fù)載均衡功能。 有興趣的寶可以跟我一起實(shí)操起來(lái),鞏固自己的C++學(xué)習(xí)吧~ 本項(xiàng)

    2024年04月14日
    瀏覽(91)
  • qt服務(wù)器 網(wǎng)絡(luò)聊天室

    qt服務(wù)器 網(wǎng)絡(luò)聊天室

    widget.cpp ?

    2024年02月15日
    瀏覽(23)
  • 如何打造一個(gè)網(wǎng)絡(luò)框架模塊對(duì)接服務(wù)器

    如何打造一個(gè)網(wǎng)絡(luò)框架模塊對(duì)接服務(wù)器

    一、了解網(wǎng)絡(luò)框架的基本原理 在開(kāi)始打造網(wǎng)絡(luò)框架模塊之前,首先需要了解網(wǎng)絡(luò)框架的基本原理。網(wǎng)絡(luò)框架是一個(gè)軟件模塊,用于處理網(wǎng)絡(luò)通信的各種細(xì)節(jié),包括數(shù)據(jù)傳輸、協(xié)議解析、錯(cuò)誤處理等。常見(jiàn)的網(wǎng)絡(luò)框架有HTTP、TCP/IP、WebSocket等。 對(duì)啦!這里有個(gè)游戲開(kāi)發(fā)交流小組

    2024年02月07日
    瀏覽(17)
  • Unity-TCP-網(wǎng)絡(luò)聊天功能(一):?API、客戶端服務(wù)器、數(shù)據(jù)格式、粘包拆包

    Unity-TCP-網(wǎng)絡(luò)聊天功能(一):?API、客戶端服務(wù)器、數(shù)據(jù)格式、粘包拆包

    TCP是面向連接的。因此需要?jiǎng)?chuàng)建監(jiān)聽(tīng)器,監(jiān)聽(tīng)客戶端的連接。當(dāng)連接成功后,會(huì)返回一個(gè)TcpClient對(duì)象。通過(guò)TcpClient可以接收和發(fā)送數(shù)據(jù)。 VS創(chuàng)建C# .net控制臺(tái)應(yīng)用 項(xiàng)目中創(chuàng)建文件夾Net,Net 下添加TCPServer.cs類,用來(lái)創(chuàng)建TCPListener和Accept客戶端連接,實(shí)例化一個(gè)TCPServcer放在Main函數(shù)

    2024年02月07日
    瀏覽(129)
  • 從零開(kāi)始實(shí)現(xiàn)一個(gè)C++高性能服務(wù)器框架----環(huán)境變量模塊

    此項(xiàng)目是根據(jù)sylar框架實(shí)現(xiàn),是從零開(kāi)始重寫(xiě)sylar,也是對(duì)sylar豐富與完善 項(xiàng)目地址:https://gitee.com/lzhiqiang1999/server-framework 項(xiàng)目介紹 :實(shí)現(xiàn)了一個(gè)基于協(xié)程的服務(wù)器框架,支持多線程、多協(xié)程協(xié)同調(diào)度;支持以異步處理的方式提高服務(wù)器性能;封裝了網(wǎng)絡(luò)相關(guān)的模塊,包括

    2024年02月02日
    瀏覽(26)
  • 從零開(kāi)始實(shí)現(xiàn)一個(gè)C++高性能服務(wù)器框架----Socket模塊

    此項(xiàng)目是根據(jù)sylar框架實(shí)現(xiàn),是從零開(kāi)始重寫(xiě)sylar,也是對(duì)sylar豐富與完善 項(xiàng)目地址:https://gitee.com/lzhiqiang1999/server-framework 項(xiàng)目介紹 :實(shí)現(xiàn)了一個(gè)基于協(xié)程的服務(wù)器框架,支持多線程、多協(xié)程協(xié)同調(diào)度;支持以異步處理的方式提高服務(wù)器性能;封裝了網(wǎng)絡(luò)相關(guān)的模塊,包括

    2023年04月08日
    瀏覽(32)
  • 從零開(kāi)始實(shí)現(xiàn)一個(gè)C++高性能服務(wù)器框架----Hook模塊

    此項(xiàng)目是根據(jù)sylar框架實(shí)現(xiàn),是從零開(kāi)始重寫(xiě)sylar,也是對(duì)sylar豐富與完善 項(xiàng)目地址:https://gitee.com/lzhiqiang1999/server-framework 項(xiàng)目介紹 :實(shí)現(xiàn)了一個(gè)基于協(xié)程的服務(wù)器框架,支持多線程、多協(xié)程協(xié)同調(diào)度;支持以異步處理的方式提高服務(wù)器性能;封裝了網(wǎng)絡(luò)相關(guān)的模塊,包括

    2023年04月09日
    瀏覽(24)
  • [C++ 網(wǎng)絡(luò)協(xié)議] 多進(jìn)程服務(wù)器端

    [C++ 網(wǎng)絡(luò)協(xié)議] 多進(jìn)程服務(wù)器端

    具有代表性的并發(fā)服務(wù)器端實(shí)現(xiàn)模型和方法: 多進(jìn)程服務(wù)器:通過(guò)創(chuàng)建多個(gè)進(jìn)程提供服務(wù)。? 多路復(fù)用服務(wù)器:通過(guò)捆綁并統(tǒng)一管理I/O對(duì)象提供服務(wù)。 多線程服務(wù)器:通過(guò)生成與客戶端等量的線程提供服務(wù)。 目錄 1. 進(jìn)程的概念及應(yīng)用 1.1 什么是進(jìn)程? 1.2 創(chuàng)建進(jìn)程 1.2.1 進(jìn)程

    2024年02月11日
    瀏覽(20)
  • C++高性能服務(wù)器網(wǎng)絡(luò)框架設(shè)計(jì)與實(shí)現(xiàn)

    C++高性能服務(wù)器網(wǎng)絡(luò)框架設(shè)計(jì)與實(shí)現(xiàn)

    這篇文章將從兩個(gè)方面來(lái)介紹,一個(gè)是服務(wù)器中的基礎(chǔ)的網(wǎng)絡(luò)通信部件;另外一個(gè)是,如何利用這些基礎(chǔ)通信部件整合成一個(gè)完整的高效的服務(wù)器框架。注意:本文以下內(nèi)容中的客戶端是相對(duì)概念,指的是連接到當(dāng)前討論的服務(wù)程序的終端,所以這里的客戶端既可能是我們傳

    2024年02月04日
    瀏覽(22)
  • esp8266WIFI模塊教程:ATK-ESP8266——TCP網(wǎng)絡(luò)通訊和服務(wù)器連接

    esp8266WIFI模塊教程:ATK-ESP8266——TCP網(wǎng)絡(luò)通訊和服務(wù)器連接

    ??ATK-MW8266D 模塊是正點(diǎn)原子推出的一款高性能 UART-WIFI(串口-無(wú)線)模塊,ATK-MW8266D 模塊板載了正點(diǎn)原子公司自主研發(fā)的 ATK-ESP-01 模塊,該模塊通過(guò) FCC、CE 認(rèn)證,可直接用于出口歐美地區(qū)的產(chǎn)品。 ??ATK-MW8266D 模塊采用串口(LVTTL)與 MCU(或其他串口設(shè)備)通訊,且內(nèi)置

    2024年04月15日
    瀏覽(64)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包