- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这个问题是我遇到过的最奇怪的 5 件事之一。所以请多多包涵。
我正在使用 ufw 防火墙运行 arch linux(截至 2017 年 3 月 9 日是最新的)。
启用防火墙后,我无法再连接到基于 websocketpp 的应用程序。不,我没有阻止相关端口。
事实上,如果我禁用防火墙,我仍然无法连接,直到我重新启动整个计算机(只是重新启动有问题的应用程序没有帮助)。
而且,UFW 也允许本地主机上的所有流量,但无论我是否在本地连接都没有区别。
我已经在 websocketpp repository 中验证了示例回显服务器的问题也是。
检查我的应用程序是否在端口 9002 上监听
sudo netstat -lnp | grep 900
tcp6 0 0 :::9002 :::* LISTEN 12695/./bin/echo_se
这里我们可以看到echo server绑定(bind)了ipv6。但是仅更改为 ipv4 无济于事。已经试过了。
带调试的回显服务器输出
[2017-03-09 11:38:06] [devel] endpoint constructor
[2017-03-09 11:38:06] [devel] server constructor
[2017-03-09 11:38:06] [devel] asio::init_asio
[2017-03-09 11:38:06] [devel] set_message_handler
[2017-03-09 11:38:06] [devel] asio::listen
[2017-03-09 11:38:06] [devel] create_connection
[2017-03-09 11:38:06] [devel] asio con transport constructor
[2017-03-09 11:38:06] [devel] connection constructor
[2017-03-09 11:38:06] [devel] transport::asio::init
[2017-03-09 11:38:06] [devel] asio::async_accept
我正在使用 telnet 尝试连接(因为此时我只关心 tcp 握手
telnet localhost 9002
Trying ::1...
(eventually timeout)
如果我关闭回声服务器,那么就没有应用程序再监听了。然后我得到(如预期的那样)
telnet localhost 9002
Trying ::1...
Connection failed: Connection refused
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
因此,现在操作系统注意到没有人在监听并拒绝发送连接。
和 UWF 规则:
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22 ALLOW Anywhere
7000:8000/udp ALLOW Anywhere
7000:8000/tcp ALLOW Anywhere
9000:9500/tcp ALLOW Anywhere
9002 ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
22 (v6) ALLOW Anywhere (v6)
7000:8000/tcp (v6) ALLOW Anywhere (v6)
9000:9500/tcp (v6) ALLOW Anywhere (v6)
9002 (v6) ALLOW Anywhere (v6)
我还应该提到其他服务器。例如我在同一端口上尝试过的最小提升 asio telnet 服务器、基于 zmq 的服务器等工作正常。
所以,我认为它一定是 websocketpp 的东西,但我不明白它可能是什么。感觉不可能,因为 tcp 握手是在应用程序级别下执行的。
此时欢迎任何想法。
为了完整性。禁用 UFW 并重新启动后,我从 echo 服务器得到了这个:
2017-03-09 11:49:17] [devel] endpoint constructor
[2017-03-09 11:49:17] [devel] server constructor
[2017-03-09 11:49:17] [devel] asio::init_asio
[2017-03-09 11:49:17] [devel] set_message_handler
[2017-03-09 11:49:17] [devel] asio::listen
[2017-03-09 11:49:17] [devel] create_connection
[2017-03-09 11:49:17] [devel] asio con transport constructor
[2017-03-09 11:49:17] [devel] connection constructor
[2017-03-09 11:49:17] [devel] transport::asio::init
[2017-03-09 11:49:17] [devel] asio::async_accept
[2017-03-09 11:49:23] [devel] asio::handle_accept
[2017-03-09 11:49:23] [devel] connection start
[2017-03-09 11:49:23] [devel] asio connection init
[2017-03-09 11:49:23] [devel] asio connection handle pre_init
[2017-03-09 11:49:23] [devel] asio connection post_init
[2017-03-09 11:49:23] [devel] asio connection handle_post_init
[2017-03-09 11:49:23] [devel] connection handle_transport_init
[2017-03-09 11:49:23] [devel] connection read_handshake
[2017-03-09 11:49:23] [devel] asio async_read_at_least: 1
[2017-03-09 11:49:23] [devel] create_connection
[2017-03-09 11:49:23] [devel] asio con transport constructor
[2017-03-09 11:49:23] [devel] connection constructor
[2017-03-09 11:49:23] [devel] transport::asio::init
[2017-03-09 11:49:23] [devel] asio::async_accept
[2017-03-09 11:49:23] [devel] asio post init timer cancelled
这在 telnet 中:
telnet localhost 9002
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
那么一切就完美了。
并且“在 sudo ufw enable && sudo ufw disable 之后”它不再起作用了......
最佳答案
好的,经过两天的调试(前一天我写题然后今天)我找到了。
这是对操作系统的 listen() 调用中的 backlog 参数为 0。加载 UFW/iptables 时,这会导致服务器无法正常运行,否则服务器会正常运行。
为什么行为会因加载或未加载 iptables 而不同,这对我来说是个谜。
This post建议即使设置为 0,积压也应该至少为 16。也许(这是我的猜测)加载 iptables 后内核不再对积压参数进行舍入,而 0 会导致它“不起作用”。我可以理解,因为队列为 0 没有意义。
无论如何。将 backlog 设置为 64 解决了我的问题。
websocketPpServerObject.set_listen_backlog(64);
另见 this github thread如果您有兴趣了解更多详情。
关于c++ - 使用启用了防火墙的 websocketpp 接受连接的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42693473/
我正在像这样设置消息处理程序并且它有效。 srv.set_message_handler(&on_message); // This works void on_message(websock
当我尝试设置set_close_handler时,出现此异常: rm -rf build/*.o main command_prompt rm -rf *.o main command_prompt
我以https://github.com/zaphoyd/websocketpp/blob/develop/examples/testee_server/testee_server.cpp为例并创建了
我在构建 websocketpp 时遇到问题以及 Windows 10 上的示例。 这是我的做法: 我首先打开 CMake GUI,并指定“D:/third-party-software/websoc
我用 websocketpp (C++) 做了一个 websocket 服务器,用 PHP 做了一个 websocket 客户端。当我在我的本地机器上测试它时它工作:客户端可以连接到服务器并且它们可以
我真的是 websocketpp 的新手。你能告诉我,我怎样才能在我的服务器中的新连接上获得 websocket 连接路径?我的意思是我需要参与其中: ws://localhost:8080/addr
我有一个多线程的 websocketpp 服务器。当我退出程序并重新启动时没有连接客户端,它没有任何问题。 但是,当连接客户端并且我退出/重新启动时,程序会抛出此错误 [2017-08-06 15:3
这个问题是我遇到过的最奇怪的 5 件事之一。所以请多多包涵。 我正在使用 ufw 防火墙运行 arch linux(截至 2017 年 3 月 9 日是最新的)。 启用防火墙后,我无法再连接到基于 w
我正在调试一些使用 websocketpp 的外部代码。尽管一切正常,但我不断收到非常冗长的控制台输出。我可以禁用输出或者它至少指向特定的东西吗?BR,丹尼尔 [2014-07-08 14:51:27
我的客户端是用 Javascript 编写的,效果很好。服务器代码也能正常工作。但是我不知道如何从服务器向客户端发送消息,或者如何结束连接。有谁知道这是怎么做到的吗 ?另外,由于我是一个完全的初学者,
我无法通过名为 websocketpp 的 WebSockets C++ 库从 MtGox API 获取信息: #include #include #include typedef websoc
我正在使用 websocketpp 来运行 websocket 服务器。但是,当我关闭应用程序并再次启动它时,出现错误: [info] asio listen error: system:98 (Ad
我用的是优秀的websocketpp在 C++ 应用程序中提供 Websockets(和 HTTP)服务器的库。我还需要在同一个应用程序中使用 HTTP 客户端来连接到 REST API。我也一直在
最近我用 C++ 中的 websocketpp 打包了 Deribit API。但是当我阅读Websocketpp的源代码时,我发现它与boost.asio有着紧密的联系。我以前听说过 boost.a
我在我的程序中使用 websocketpp 作为 websocket 服务器。但是最近在某些用户的环境中,当我监听某个特定端口时,发生了错误,我打印了 error_code 消息,它是“Underly
对于我的应用程序来说,持有websocketpp::connection_hdl的 map 更加方便和合乎逻辑。 s 作为映射中的键,但我发现这可能有潜在的危险,因为它们是 weak_ptrs。 然而
我需要快速、安全和便携的 websockts,所以我一直在网上搜索,我通过 Zaphoyd Studios 发现了 WebSocket++ . 我的 C++ 经验为零(尽管我是一名熟练的程序员),但它
我在 Ubuntu 上工作,我正在用 c++ 编写一个使用 websocket++ 库的服务器,它非常适合来自浏览器的传入 websocket 连接(我在那里使用了 javascript)。 现在我想
我正在制作一个 (c++) 应用程序,它是一个 websocket 客户端和 websocket 服务器。为了能够做到这一点,我正在使用库 websocketpp。为了使应用程序既是客户端又是服务器,
有没有办法从 websocketpp 中的 connection 或 connection_ptr 获取 native 套接字描述符?在将帧发送到客户端之前,我需要设置 TCP_CORK。我是 Boo
我是一名优秀的程序员,十分优秀!