通过POCO website上的幻灯片,我编写了一个与他们的第一个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函数输出一些数据,然后挂起。 我如何获得其余数据?
答案 0 :(得分:0)
使用Poco :: Net :: DialogSocket。
答案 1 :(得分: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);
答案 2 :(得分:-1)
使用我自己的TCP服务器进行测试,我发现如果代码无法连接到远程服务器,则代码会挂起。
如果有正在运行的TCP服务器,在向/从远程服务器发送和接收一些数据之后,如果我关闭远程服务器连接(关闭我的服务器),服务器响应将转到stdout控制台。
您是否尝试通过代理连接谷歌?
另一条线索......来自Poco :: Net :: SocketStream描述:
使用来自SocketStream的格式化输入时,请始终确保a 为套接字设置接收超时。否则你的程序可能会 意外地挂了。
尝试在代码中使用try-catch块来测试它是否正在启动一些异常。
祝你好运