【发布时间】:2015-04-20 20:56:55
【问题描述】:
我使用 POCO 库用 C++ 编写的服务器应用程序有一个奇怪的问题。它工作得很好,几天前刚刚停止工作。即使使用 2 周前的 exe 也无法正常工作。
问题是,我无法通过 localhost 连接到服务器,但是我网络外部的其他人可以毫无问题地连接...
我已经在其他计算机上测试过,除了一台计算机之外,它是相同的。 该问题仅存在于 Windows 上。我已经在 Linux 上进行了测试,它运行良好。
这个问题也在http://pocoproject.org/slides/200-Network.pdf的POCO教程代码上重现:
#include "Poco/Net/ServerSocket.h"
#include "Poco/Net/StreamSocket.h"
#include "Poco/Net/SocketStream.h"
#include "Poco/Net/SocketAddress.h"
int main(int argc, char** argv)
{
Poco::Net::ServerSocket srv(8080); // does bind + listen
for (;;)
{
Poco::Net::StreamSocket ss = srv.acceptConnection();
Poco::Net::SocketStream str(ss);
str << "HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"\r\n"
"<html><head><title>My 1st Web Server</title></head>"
"<body><h1>Hello, world!</h1></body></html>"
<< std::flush;
}
return 0;
}
在 Chrome 中输入 127.0.0.1:8080 会导致 ERR_CONNECTION_ABORTED。 http://www.canyouseeme.org/ 报告它可以在端口 8080 上看到我的服务。
其他应用程序(我猜不使用 POCO?)工作正常。
我完全不知道这个问题的原因是什么...... 如有任何建议,我将不胜感激。
【问题讨论】:
-
看起来像防火墙、间谍软件(垃圾邮件代理)或 dll 地狱问题。您是否尝试在另一个端口上启动?也许某些服务正在使用此端口,但没有使用 http?可以用net cat测试吗?下载 net cat 并启动 nc -lp8080 和另一个实例 nc 127.0.0.1 8080。它们连接了吗?
-
从另一个端口启动并不能解决问题。没有其他服务也没有使用此端口。是的,他们连接:screenshooter.net/102449625/xdwtuqk
-
本月的 Windows 更新是否引入了问题?
-
这是我的第一个怀疑,虽然我已经创建了一个干净的Windows 7安装的虚拟机,但问题仍然存在。
-
@ValentinHeinitz 我也不认为这是 dll 地狱问题。我已将服务器与静态库链接(exe 仅依赖于 kernel32、advapi32、ihlpapi 和 ws2_32),但问题仍然存在。
标签: c++ windows poco-libraries