0

通过POCO 网站上的幻灯片,我编写了一个与他们的第一个 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

0

改用 Poco::Net::DialogSocket。

于 2014-08-13T07:39:39.347 回答
0

似乎答案是在调用shutdownSend()后立即调用套接字flush()

请参阅 poco 问题 2384 https://github.com/pocoproject/poco/issues/2384

所以它会是:

socket_stream.flush(); stream_socket.shutdownSend();

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

于 2018-08-20T01:53:46.503 回答
-1

使用我自己的 TCP 服务器进行测试,如果无法连接到远程服务器,我看到您的代码挂起。

如果有一个正在运行的 TCP 服务器,在向远程服务器发送和接收一些数据之后,如果我关闭远程服务器连接(关闭我的服务器),服务器响应将转到标准输出控制台。

您是否尝试通过代理与谷歌连接?

另一个线索......来自 Poco::Net::SocketStream 描述:

当使用来自 SocketStream 的格式化输入时,请始终确保为套接字设置了接收超时。否则您的程序可能会意外挂起。

尝试在代码中使用 try-catch 块来测试它是否正在启动一些异常。

祝你好运

于 2013-03-21T16:21:21.447 回答