3

我正在开发一个需要执行网络通信并决定使用poco c++ 库的应用程序。完成网络教程后,我似乎找不到任何形式的建立网络连接的验证。

在以下示例中,客户端尝试使用 tcp 套接字流连接到服务器:

#include "Poco/Net/SocketAddress.h"
#include "Poco/Net/StreamSocket.h"
#include "Poco/Net/SocketStream.h"
#include "Poco/StreamCopier.h"
#include <iostream>  

int main(int argc, char** argv)
{
 Poco::Net::SocketAddress sa("www.appinf.com", 80);
 Poco::Net::StreamSocket socket(sa);
 Poco::Net::SocketStream str(socket);
 str << "GET / HTTP/1.1\r\n"
        "Host: www.appinf.com\r\n"
        "\r\n";
 str.flush();
 Poco::StreamCopier::copyStream(str, std::cout);
 return 0;
}

但是,我找不到与以下相关的任何信息:

  • 错误检查(如果 www.appinf.com 不可用或不存在怎么办)
  • 这些调用可能引发的异常类型

唯一提到的是,如果在使用格式化输入时未为套接字设置接收超时,则SocketStream可能会挂起。

如何检查主机是否处于活动状态并可以建立 tcp 连接,实现如下方法:

void TCPClient::connectTo(std::string host, bool& connected, unsigned int port) {
     std::string hi = "hi";
     Poco::Net::SocketAddress clientSocketAddress(host, port);
     Poco::Net::StreamSocket clientStreamSocket;
     // try to connect and avoid hang by setting a timeout
     clientStreamSocket.connect(clientSocketAddress, timeout); 
     // check if the connection has failed or not,
     // set the connected parameter accordingly
     // additionally try to send bytes over this connection
     Poco::Net::SocketStream clientSocketStream(clientStreamSocket);
     clientSocketStream << hi << std::endl;
     clientSocketStream.flush();
     // close the socket stream
     clientSocketStream.close();
     // close stream
     clientStreamSocket.shutdown();
}
4

0 回答 0