parent
c0c5bbb1d4
commit
dc45428b3a
@ -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…
Reference in new issue