代码拉取完成,页面将自动刷新
#pragma once
#include "ThreadPool.cpp"
#include "TcpServer.cpp"
#include "CalTask.cpp"
#include "log.hpp"
#include <signal.h>
//构建计算器服务器
class CalServer{
const int size = 2048;
private:
Thread_Pool<CalTask> * Pool_ptr_;
MySocket::TcpServer Socket_;
int Socket_fd_ = -1;
public:
CalServer(const std::string& de_ip = "172.19.29.44",uint16_t de_port = 8081)
: Socket_(de_ip,de_port)
{
Pool_ptr_ = Thread_Pool<CalTask>::Getinstance();
if(Pool_ptr_ == nullptr){
lg(Fatal,"Pool_ptr_ is nullptr\n");
return;
}
Pool_ptr_->Create_thread();
}
~CalServer(){}
public:
//建立Tcp连接条件
bool Init(){
Socket_.BuildSocket();
Socket_fd_ = Socket_.Get_Server_fd();
if(Socket_fd_ < 0){
lg(Fatal,"BuildSocket failed\n");
return true;
}
Socket_.SocketBind();
Socket_.Socklisten();
lg(Info, "init server .... done");
return true;
}
//启动服务器
void Start(){
signal(SIGCHLD, SIG_IGN);
signal(SIGPIPE, SIG_IGN);
char ReadBuffer[size];
while(true){
//接受用户请求
std::string client_ip;
uint16_t client_port;
int client_fd = Socket_.SockAccept(client_ip,client_port);
if(client_fd < 0){
lg(Warning,"SockAccept error\n");
continue;
}
lg(Info, "accept a new link, sockfd: %d, clientip: %s, clientport: %d", client_fd, client_ip.c_str(), client_port);
int n = read(client_fd,ReadBuffer,sizeof(ReadBuffer));
ReadBuffer[n] = 0;
std::string TaskStr(ReadBuffer);
printf("receives mess from client : %s",ReadBuffer);
if(n < 0){
lg(Warning,"read error\n");
break;
}
CalTask task(client_fd,client_ip,client_port,TaskStr);
Pool_ptr_->Push(task);
}
}
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。