通过POCO website上的幻灯片,我写了一个几乎与他们的第一个网络示例完全相同的程序。
#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函数输出一些数据,然后挂起。我如何获取其余的数据?
发布于 2014-08-13 15:39:39
改用Poco::Net::DialogSocket。
发布于 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);
发布于 2013-03-22 00:21:21
使用我自己的TCP服务器进行测试,我发现如果您的代码不能连接到远程服务器,它就会挂起。
如果有一个正在运行的TCP服务器,在向/从远程服务器发送和接收一些数据之后,如果我关闭远程服务器连接(关闭我的服务器),服务器响应将转到stdout控制台。
您是否正在尝试通过代理与google连接?
另一个线索..。来自Poco::Net::SocketStream描述:
在使用来自SocketStream的格式化输入时,请始终确保为套接字设置了接收超时。否则,您的程序可能会意外挂起。
尝试在您的代码中使用try-catch块来测试它是否启动了一些异常。
祝好运
https://stackoverflow.com/questions/15540448
复制相似问题