controller相关代码,更新了 网关端和客户端的互联接口、前端和客户端的互联接口代码的大体框架,具体功能还未经过调试

pull/6/head
lingel 9 months ago
parent c0c5bbb1d4
commit dc45428b3a

@ -0,0 +1,64 @@
#include <iostream>
#include <string>
#include <winsock2.h>
#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;
}

@ -0,0 +1,96 @@
#include <winsock2.h>
#include <iostream>
#include <string>
#include <cstring>
#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;
}

@ -0,0 +1,59 @@
// main.cpp
#include <Poco/Net/HTTPServer.h>
#include <Poco/Net/HTTPRequestHandler.h>
#include <Poco/Net/HTTPRequestHandlerFactory.h>
#include <Poco/Net/HTTPResponse.h>
#include <Poco/Net/HTTPServerParams.h>
#include <Poco/Net/ServerSocket.h>
#include <Poco/JSON/JSON.h>
#include <Poco/JSON/Parser.h>
#include <iostream>
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;
}
Loading…
Cancel
Save