使用Poco c ++库进行套接字验证

时间:2013-08-17 10:35:31

标签: c++ windows visual-studio poco

我正在开发一个需要执行网络通信的应用程序,并决定使用poco c++ libraries。经过network tutorial后,我无法找到建立网络连接的任何形式的验证。

在以下示例中,客户端尝试使用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();
}

0 个答案:

没有答案