我正在开发一个需要执行网络通信并决定使用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();
}