0

POCO の Web サイトのスライドを見ると、最初の NET の例とほぼ同じプログラムを作成しました。

#include <iostream>
#include <cstdlib>

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


int main(int argc, char** argv){

    Poco::Net::SocketAddress socket_address("www.google.com",80);
    Poco::Net::StreamSocket stream_socket(socket_address);
    Poco::Net::SocketStream socket_stream(stream_socket);

    socket_stream << "GET / HTTP/1.1\r\n"
           "Host: www.google.com\r\n"
           "\r\n";
    socket_stream.flush();

    Poco::StreamCopier::copyStream(socket_stream,std::cout);

    return EXIT_SUCCESS;
}

CopyStream 関数はデータの一部を出力した後、ハングします。残りのデータを取得するにはどうすればよいですか?

4

3 に答える 3

-1

私自身の TCP サーバーを使用してテストしたところ、リモート サーバーに接続できない場合、コードがハングすることがわかりました。

実行中の TCP サーバーがある場合、リモート サーバーとの間でデータを送受信した後、リモート サーバー接続を閉じる (サーバーをシャットダウンする) と、サーバーの応答が stdout コンソールに送信されます。

プロキシ経由で Google に接続しようとしていますか?

別の手がかり... Poco::Net::SocketStream の説明から:

SocketStream からフォーマットされた入力を使用する場合は、ソケットに受信タイムアウトが設定されていることを常に確認してください。そうしないと、プログラムが予期せずハングする可能性があります。

コードで try-catch ブロックを使用して、何らかの例外が発生しているかどうかをテストしてみてください。

幸運を

于 2013-03-21T16:21:21.447 に答える