首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Poco::Net库在Poco::Net::SocketStream的输出上挂起

Poco::Net库在Poco::Net::SocketStream的输出上挂起
EN

Stack Overflow用户
提问于 2013-03-21 13:56:36
回答 3查看 1.4K关注 0票数 0

通过POCO website上的幻灯片,我写了一个几乎与他们的第一个网络示例完全相同的程序。

代码语言:javascript
复制
#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函数输出一些数据,然后挂起。我如何获取其余的数据?

EN

回答 3

Stack Overflow用户

发布于 2014-08-13 15:39:39

改用Poco::Net::DialogSocket。

票数 0
EN

Stack Overflow用户

发布于 2018-08-20 09:53:47

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

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

因此它将是:

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

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

票数 0
EN

Stack Overflow用户

发布于 2013-03-22 00:21:21

使用我自己的TCP服务器进行测试,我发现如果您的代码不能连接到远程服务器,它就会挂起。

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

您是否正在尝试通过代理与google连接?

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

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

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

祝好运

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15540448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档