使用Poco c ++库进行套接字validation

我正在研究需要执行networking通信的应用程序,并决定使用poco c ++库 。 通过networking教程后,我似乎无法findbuild立networking连接的任何forms的validation。

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

#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不可用或不存在的话)
  • 这些调用可能引发的exceptiontypes

唯一值得一提的是,如果在使用格式化input时没有为套接字设置接收超时, SocketStream可能会挂起。

我如何检查一个主机是否活着,并可能build立一个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(); }