gpt4 book ai didi

c++ - 带 POCO C++ 库的多线程 TCP 服务器

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:02:09 27 4
gpt4 key购买 nike

我正在尝试使用 POCO C++ 库开发 TCP 服务器。我找到了一些例子 here .起初我尝试了 Alex 的示例,但关闭事件不起作用。 EchoServer 也有同样的问题。所以,然后我尝试了 Cesar Ortiz 示例并遇到了一个不寻常的问题。一段时间后服务器抛出错误:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
["src/ErrorHandler.cpp", line 60]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

并且连接出现连接超时错误,新连接也是如此。使用事件处理程序的示例似乎更正确,但我不知道如何修复关机事件。

最佳答案

如果您只需要多线程 TCP 服务器,那么“开箱即用”Poco::Net::TCPServer会做 - 它在内部是多线程的。从定义连接开始,这个连接将只回显您发送给它的任何内容:

class EchoConnection: public TCPServerConnection {
public:
EchoConnection(const StreamSocket& s): TCPServerConnection(s) { }

void run() {
StreamSocket& ss = socket();
try {
char buffer[256];
int n = ss.receiveBytes(buffer, sizeof(buffer));
while (n > 0) {
ss.sendBytes(buffer, n);
n = ss.receiveBytes(buffer, sizeof(buffer));
}
}
catch (Poco::Exception& exc)
{ std::cerr << "EchoConnection: " << exc.displayText() << std::endl; }
}
};

然后,运行服务器并向它发送一些数据:

TCPServer srv(new TCPServerConnectionFactoryImpl<EchoConnection>());
srv.start();

SocketAddress sa("localhost", srv.socket().address().port());
StreamSocket ss(sa);
std::string data("hello, world");
ss.sendBytes(data.data(), (int) data.size());
char buffer[256] = {0};
int n = ss.receiveBytes(buffer, sizeof(buffer));
std::cout << std::string(buffer, n) << std::endl;

srv.stop();

关于c++ - 带 POCO C++ 库的多线程 TCP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16510205/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com