From dc45428b3ab92147f58a3b8b54b380397d3128f8 Mon Sep 17 00:00:00 2001 From: lingel <2894340009@qq.com> Date: Fri, 24 May 2024 12:40:28 +0800 Subject: [PATCH] =?UTF-8?q?controller=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=EF=BC=8C=E6=9B=B4=E6=96=B0=E4=BA=86=20=E7=BD=91=E5=85=B3?= =?UTF-8?q?=E7=AB=AF=E5=92=8C=E5=AE=A2=E6=88=B7=E7=AB=AF=E7=9A=84=E4=BA=92?= =?UTF-8?q?=E8=81=94=E6=8E=A5=E5=8F=A3=E3=80=81=E5=89=8D=E7=AB=AF=E5=92=8C?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF=E7=9A=84=E4=BA=92=E8=81=94=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=BB=A3=E7=A0=81=E7=9A=84=E5=A4=A7=E4=BD=93=E6=A1=86?= =?UTF-8?q?=E6=9E=B6=EF=BC=8C=E5=85=B7=E4=BD=93=E5=8A=9F=E8=83=BD=E8=BF=98?= =?UTF-8?q?=E6=9C=AA=E7=BB=8F=E8=BF=87=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controler/connecter_controler.cpp | 64 ++++++++++++++++++ src/controler/connecter_gateway.cpp | 96 +++++++++++++++++++++++++++ src/controler/interface_cpptovue.cpp | 59 ++++++++++++++++ src/controler/message_handler.cpp | 0 4 files changed, 219 insertions(+) create mode 100644 src/controler/connecter_controler.cpp create mode 100644 src/controler/connecter_gateway.cpp create mode 100644 src/controler/interface_cpptovue.cpp create mode 100644 src/controler/message_handler.cpp diff --git a/src/controler/connecter_controler.cpp b/src/controler/connecter_controler.cpp new file mode 100644 index 0000000..218a30c --- /dev/null +++ b/src/controler/connecter_controler.cpp @@ -0,0 +1,64 @@ +#include +#include +#include +#pragma comment(lib, "ws2_32.lib") // 告诉链接器链接WS2_32.lib库 + +#define PORT 8888 // 假设网关的端口为8888,你可以根据实际情况修改 + +int main() { + WSADATA wsaData; + SOCKET sock = INVALID_SOCKET; + struct sockaddr_in serverAddr; + char *recvbuf; + const char *sendbuf = "Hello, Gateway!"; + + // 初始化Winsock + int iResult = WSAStartup(MAKEWORD(2,2), &wsaData); + if (iResult != 0) { + std::cerr << "WSAStartup failed: " << iResult << std::endl; + return 1; + } + + // 创建套接字 + sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (sock == INVALID_SOCKET) { + std::cerr << "Could not create socket: " << WSAGetLastError() << std::endl; + WSACleanup(); + return 1; + } + + // 设置服务器地址 + serverAddr.sin_family = AF_INET; + serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 假设网关的IP为127.0.0.1,你可以根据实际情况修改 + serverAddr.sin_port = htons(PORT); + + // 连接到服务器 + iResult = connect(sock, (SOCKADDR*)&serverAddr, sizeof(serverAddr)); + if (iResult SOCKET_ERROR) { + std::cerr << "Connect failed with error: " << WSAGetLastError() << std::endl; + closesocket(sock); + WSACleanup(); + return 1; + } + + std::cout << "Connected to server." << std::endl; + + // 发送消息 + iResult = send(sock, sendbuf, strlen(sendbuf), 0); + if (iResult == SOCKET_ERROR) { + std::cerr << "Send failed with error: " << WSAGetLastError() << std::endl; + closesocket(sock); + WSACleanup(); + return 1; + } + + std::cout << "Message sent." << std::endl; + + // 关闭套接字 + closesocket(sock); + + // 清理Winsock + WSACleanup(); + + return 0; +} \ No newline at end of file diff --git a/src/controler/connecter_gateway.cpp b/src/controler/connecter_gateway.cpp new file mode 100644 index 0000000..6aa5856 --- /dev/null +++ b/src/controler/connecter_gateway.cpp @@ -0,0 +1,96 @@ +#include +#include +#include +#include +#pragma comment(lib, "ws2_32.lib") + +#define PORT 8888 // 监听的端口号 +#define KEY "secret_password" // 定义认证密钥 + +int main() { + WSADATA wsaData; + SOCKET sock, newSock; + SOCKADDR_IN serverAddr, clientAddr; + int cAddrLen = sizeof(clientAddr); + char recvbuf[1024]; + char sendbuf[1024]; + + // 初始化Winsock + WSAStartup(MAKEWORD(2,2), &wsaData); + + // 创建套接字 + sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (sock == INVALID_SOCKET) { + std::cerr << "Could not create socket: " << WSAGetLastError() << std::endl; + WSACleanup(); + return 1; + } + + // 设置服务器地址 + serverAddr.sin_family = AF_INET; + serverAddr.sin_addr.s_addr = INADDR_ANY; + serverAddr.sin_port = htons(PORT); + + // 绑定套接字到地址 + if (bind(sock, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) { + std::cerr << "Bind failed with error: " << WSAGetLastError() << std::endl; + closesocket(sock); + WSACleanup(); + return 1; + } + + // 开始监听 + if (listen(sock, SOMAXCONN) == SOCKET_ERROR) { + std::cerr << "Listen failed with error: " << WSAGetLastError() << std::endl; + closesocket(sock); + WSACleanup(); + return 1; + } + + std::cout << "Server listening on port " << PORT << "..." << std::endl; + + // 接受连接 + newSock = accept(sock, (SOCKADDR*)&clientAddr, &cAddrLen); + if (newSock == INVALID_SOCKET) { + std::cerr << "Accept failed with error: " << WSAGetLastError() << std::endl; + closesocket(sock); + WSACleanup(); + return 1; + } + + std::cout << "Connected with client." << std::endl; + + // 发送密钥 + strcpy(sendbuf, KEY); + if (send(newSock, sendbuf, strlen(sendbuf), 0) == SOCKET_ERROR) { + std::cerr << "Send failed with error: " << WSAGetLastError() << std::endl; + closesocket(newSock); + closesocket(sock); + WSACleanup(); + return 1; + } + + // 接收客户端响应的密钥 + int iResult = recv(newSock, recvbuf, sizeof(recvbuf), 0); + if (iResult > 0) { + recvbuf[iResult] = '\0'; + if (strcmp(recvbuf, KEY) == 0) { + std::cout << "Authentication successful." << std::endl; + // 认证成功后,可以接收客户端的消息或进行其他操作 + // ... + } else { + std::cerr << "Authentication failed." << std::endl; + } + } else { + std::cerr << "Receive failed with error: " << WSAGetLastError() << std::endl; + } + + // 关闭套接字 + closesocket(newSock); + closesocket(sock); + + // 清理Winsock + WSACleanup(); + + return 0; +} \ No newline at end of file diff --git a/src/controler/interface_cpptovue.cpp b/src/controler/interface_cpptovue.cpp new file mode 100644 index 0000000..24494d5 --- /dev/null +++ b/src/controler/interface_cpptovue.cpp @@ -0,0 +1,59 @@ +// main.cpp +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace Poco::Net; +using namespace Poco::JSON; + +class DataRequestHandler : public HTTPRequestHandler { +public: + void handleRequest(HTTPServerRequest &req, HTTPServerResponse &resp) override { + // 设置响应的HTTP头 + resp.setContentType("application/json"); + + // 创建 JSON 对象 + Object::Ptr pObj = new Object(); + pObj->set("key", "value"); // 示例数据 + + // 将 JSON 对象转换为字符串 + String result; + Poco::JSON::Stringifier::stringify(*pObj, result); + + // 发送响应 + resp.send() << result; + } +}; + +class DataRequestHandlerFactory : public HTTPRequestHandlerFactory { +public: + HTTPRequestHandler* createRequestHandler(const HTTPServerRequest &req) override { + // 检查请求的路径是否为 "/api/data" + if (req.getURI() == "/api/data") { + return new DataRequestHandler(); + } + return 0; + } +}; + +int main(int argc, char** argv) { + ServerSocket svs(8080); + HTTPServerParams* pParams = new HTTPServerParams; + pParams->setMaxQueued(100); + pParams->setMaxThreads(16); + HTTPServer srv(new DataRequestHandlerFactory(), svs, pParams); + + std::cout << "Server started on port 8080" << std::endl; + srv.start(); + + std::cin.get(); // 等待用户输入以结束服务器 + + srv.stop(); + return 0; +} \ No newline at end of file diff --git a/src/controler/message_handler.cpp b/src/controler/message_handler.cpp new file mode 100644 index 0000000..e69de29 -- 2.34.1