ネットワーク通信を実行する必要があるアプリケーションに取り組んでおり、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();
}