0MQ 远程登录数据 C++
0MQ telnet data C++
我正在尝试在 VS2013 上使用 0MQ 和 C++ 发送 telnet
命令。
我使用了 ZMQ 主页上的 HW 客户端示例代码。
但我在 WireShark 上看到的是 telnet 数据包,里面没有数据。
这段代码是原型,我需要的只是能够发送这条命令。
让它工作后,它会得到一些清洁。
//
// Hello World client in C++
// Connects REQ socket to tcp://localhost:5555
// Sends "Hello" to server, expects "World" back
//
#include <zmq.hpp>
#include <zmq.h>
#include <string>
#include <iostream>
int main()
{
// Prepare our context and socket
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REQ);
std::cout << "Connecting to hello world server…" << std::endl;
socket.connect("tcp://10.40.6.226:23");
// Do 10 requests, waiting each time for a response
for (int request_nbr = 0; request_nbr != 1; request_nbr++) {
zmq::message_t request(2);
memcpy(request.data(), "Hello", 5);
std::cout << "Sending Hello " << request_nbr << "…" << std::endl;
socket.send(request);
//client_socket
// Get the reply.
/*zmq::message_t reply;
socket.recv(&reply);
std::cout << "Received World " << request_nbr << std::endl;*/
}
return 0;
}
所以一切看起来都很好,除了我在 telnet 数据包中看不到字符串 "Hello"。
是的,可以通过 ZeroMQ
发送 telnet
命令
这样做没有主要障碍。一旦你在 ZeroMQ 上正确设置了端到端关系,你的 telnet
-commands 就可以顺利地流过 link,满足所有必需的底层协议特定的握手和事件处理。
为什么它在这里不起作用?
最强烈的原因 "behind" 观察到的场景是,您 错过了 ZeroMQ 正式通信模式 的本质框架。
ZeroMQ 套接字不是 "plain"-套接字,因为套接字这个词的重复使用提醒。如果 ZeroMQ 只是模仿操作系统中已经可用的哑套接字,那么将有接近 none 的好处。人们可能从 ZeroMQ 中获益的最大智力价值正是基于相反的方法。多亏了 AQMP 和 ZeroMQ 及其年轻祖先诞生的数千人*年的经验,框架内置了智能功能,我们很乐意在我们的应用程序领域中重用这些功能,而不是尝试重新发明轮子。
最好的下一步是什么?
假设一个人对智能消息传递的兴趣没有丧失,恕我直言,下一步最好的办法是花时间阅读
+ 一个小提示,为什么代码不通过线路移动任何数据
引入 ZeroMQ 架构的良好设计实践将传输本身与套接字原型的连接状态分开。也就是说,一个人可能 "pump-data-into" a-socket-archetype 的本地端(你的代码 .send()
-s 10x 在 for 循环中)但是远程端不需要在整个剧集中在线(或根本不在线)。这意味着,当且仅当正式通信模式的两个端点都同意这样做时,PHY 层(电线)将看到并传输任何数据。
在REQ/REP
场景中意味着
{REQ|REP}
.bind()
<-online-visibility-episode->
{REP|REQ}
.connect()
状态
REQ
.send()
-> REP
.recv()
REP
.send()
-> ( REQ
.recv()
)
REQ
.send()
->
保持 REQ/REP
正式沟通模式 "forward-stepping".
的旋转木马政策的性质
在发布的 for(){...}
代码块中,这意味着如果遇到 step 1.
,您可以只检测第一条也是唯一一条消息从 REQ
到 REP
,因为你似乎没有注意执行强制步骤 2.
& 3.
到 .recv()
REP
在 REQ
-行为模型之前的响应允许发送任何下一个请求(这是 REQ/REP
模式的核心性质,不是吗?)。
一旦您对 ZeroMQ 有了更深入的了解,您也会习惯于检查与各个函数调用相关的错误。
调用 .connect()
尝试,(幸运的是通过 port 23
)到 telnet-daemon
的手将在电线上可见-级别,但是协议级握手几乎不允许正确制定的 ZeroMQ 线级协议消息(如果处于非透明模式(假设是 telnet),这肯定会让线级嗅探器感到惊讶)使 telnet 开心-daemon 进程,除了 telnet-protocol-session 设置对话外,它什么都不等待,在描述的场景中,它必须无法满足。
我正在尝试在 VS2013 上使用 0MQ 和 C++ 发送 telnet
命令。
我使用了 ZMQ 主页上的 HW 客户端示例代码。
但我在 WireShark 上看到的是 telnet 数据包,里面没有数据。
这段代码是原型,我需要的只是能够发送这条命令。
让它工作后,它会得到一些清洁。
//
// Hello World client in C++
// Connects REQ socket to tcp://localhost:5555
// Sends "Hello" to server, expects "World" back
//
#include <zmq.hpp>
#include <zmq.h>
#include <string>
#include <iostream>
int main()
{
// Prepare our context and socket
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REQ);
std::cout << "Connecting to hello world server…" << std::endl;
socket.connect("tcp://10.40.6.226:23");
// Do 10 requests, waiting each time for a response
for (int request_nbr = 0; request_nbr != 1; request_nbr++) {
zmq::message_t request(2);
memcpy(request.data(), "Hello", 5);
std::cout << "Sending Hello " << request_nbr << "…" << std::endl;
socket.send(request);
//client_socket
// Get the reply.
/*zmq::message_t reply;
socket.recv(&reply);
std::cout << "Received World " << request_nbr << std::endl;*/
}
return 0;
}
所以一切看起来都很好,除了我在 telnet 数据包中看不到字符串 "Hello"。
是的,可以通过 ZeroMQ
发送telnet
命令
这样做没有主要障碍。一旦你在 ZeroMQ 上正确设置了端到端关系,你的 telnet
-commands 就可以顺利地流过 link,满足所有必需的底层协议特定的握手和事件处理。
为什么它在这里不起作用?
最强烈的原因 "behind" 观察到的场景是,您 错过了 ZeroMQ 正式通信模式 的本质框架。
ZeroMQ 套接字不是 "plain"-套接字,因为套接字这个词的重复使用提醒。如果 ZeroMQ 只是模仿操作系统中已经可用的哑套接字,那么将有接近 none 的好处。人们可能从 ZeroMQ 中获益的最大智力价值正是基于相反的方法。多亏了 AQMP 和 ZeroMQ 及其年轻祖先诞生的数千人*年的经验,框架内置了智能功能,我们很乐意在我们的应用程序领域中重用这些功能,而不是尝试重新发明轮子。
最好的下一步是什么?
假设一个人对智能消息传递的兴趣没有丧失,恕我直言,下一步最好的办法是花时间阅读
+ 一个小提示,为什么代码不通过线路移动任何数据
引入 ZeroMQ 架构的良好设计实践将传输本身与套接字原型的连接状态分开。也就是说,一个人可能 "pump-data-into" a-socket-archetype 的本地端(你的代码 .send()
-s 10x 在 for 循环中)但是远程端不需要在整个剧集中在线(或根本不在线)。这意味着,当且仅当正式通信模式的两个端点都同意这样做时,PHY 层(电线)将看到并传输任何数据。
在REQ/REP
场景中意味着
{REQ|REP}
.bind()
<-online-visibility-episode->
{REP|REQ}
.connect()
状态REQ
.send()
-> REP
.recv()
REP
.send()
-> ( REQ
.recv()
)
REQ
.send()
->
保持 REQ/REP
正式沟通模式 "forward-stepping".
在发布的 for(){...}
代码块中,这意味着如果遇到 step 1.
,您可以只检测第一条也是唯一一条消息从 REQ
到 REP
,因为你似乎没有注意执行强制步骤 2.
& 3.
到 .recv()
REP
在 REQ
-行为模型之前的响应允许发送任何下一个请求(这是 REQ/REP
模式的核心性质,不是吗?)。
一旦您对 ZeroMQ 有了更深入的了解,您也会习惯于检查与各个函数调用相关的错误。
调用 .connect()
尝试,(幸运的是通过 port 23
)到 telnet-daemon
的手将在电线上可见-级别,但是协议级握手几乎不允许正确制定的 ZeroMQ 线级协议消息(如果处于非透明模式(假设是 telnet),这肯定会让线级嗅探器感到惊讶)使 telnet 开心-daemon 进程,除了 telnet-protocol-session 设置对话外,它什么都不等待,在描述的场景中,它必须无法满足。