Poco::Net库挂起在Poco::Net::SocketStream的输出上
Poco::Net library hangs on output of Poco::Net::SocketStream
根据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.1rn"
"Host: www.google.comrn"
"rn";
socket_stream.flush();
Poco::StreamCopier::copyStream(socket_stream,std::cout);
return EXIT_SUCCESS;
}
CopyStream函数输出一些数据,然后挂起。我如何得到剩下的数据? 使用Poco::Net::DialogSocket代替。
似乎答案是在flush()
调用之后调用套接字上的shutdownSend()
。
参见poco issue 2384https://github.com/pocoproject/poco/issues/2384
所以应该是:
socket_stream.flush ();
stream_socket.shutdownSend ();少:StreamCopier: copyStream (socket_stream, std:: cout);
使用我自己的TCP服务器进行测试,我看到您的代码挂起,如果它不能连接到远程服务器。
如果有一个正在运行的TCP服务器,在向远程服务器发送和接收一些数据之后,如果我关闭远程服务器连接(关闭我的服务器),服务器响应将转到stdout控制台。
您正在尝试通过代理连接到谷歌吗?
另一条线索……from Poco::Net::SocketStream description:
当使用来自SocketStream的格式化输入时,始终确保a为套接字设置了接收超时。否则你的程序可能出乎意料地挂。
尝试在你的代码中使用Try -catch块来测试它是否启动了一些异常。
好运相关文章:
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- Poco FindMySql.cmake 无法找到 MySQL 源代码
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- 是否可以在Linux上使用.Net Core 3.1创建C++/CLI代码的C#DLL
- 像 POCO 这样的C++图书馆如何访问网络?
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- 如何修复 poco Poco::Net::TCPServerParams() valgrind 明确的泄漏
- Poco::Net::HTTPClientSession throw exception without unique_
- Poco::Net HTTPServer:如何检测断开连接的客户端?
- 如何使用 Poco::Net::HTTPSClientSession 绑定特定的源 IP 地址
- Unix 域套接字与 Poco::Net::TCPServer.
- 与 Poco Net 的链接错误
- 在HTTP/GET后几秒钟引发Poco::Net::NoMessageException
- 使用 Poco Net 发送电子邮件时停止
- Poco::Net::HTTPClientSession json data Content-Type not rece
- POCO::NET::TCPServer & TCPConnection 传入数据包处理程序?
- 如何从使用Poco::Net::TCPServer的程序中干净地退出
- Poco::Net库挂起在Poco::Net::SocketStream的输出上