我正在尝试使用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/

10-11 22:46
查看更多