rust - Rust,libzmq,客户端只发送消息,然后是接收
问题描述
我正在测试 Rust libzmq 客户端
https://crates.io/crates/libzmq
https://docs.rs/libzmq/0.2.5/libzmq/struct.ClientBuilder.html
并偶然发现了这种奇怪的行为。
此客户端不会发送消息:
use libzmq::{prelude::*, *, ServerBuilder, ClientBuilder, TcpAddr};
fn main() -> Result<(), String> {
let saddr = format!("{}:{}", "192.168.1.206","5540");
println!("Strating client for {}", saddr);
let addr2: TcpAddr = saddr.try_into().unwrap();
let client = ClientBuilder::new()
.connect(&addr2)
.build().unwrap();
client.send("test").unwrap();
println!("Finished");
Ok(())
}
这将发送:
use libzmq::{prelude::*, *, ServerBuilder, ClientBuilder, TcpAddr};
fn main() -> Result<(), String> {
let saddr = format!("{}:{}", "192.168.1.206","5540");
println!("Strating client for {}", saddr);
let addr2: TcpAddr = saddr.try_into().unwrap();
let client = ClientBuilder::new()
.connect(&addr2)
.build().unwrap();
client.send("test").unwrap();
let mut msg = Msg::new();
client.recv(&mut msg).unwrap();
println!("Finished");
Ok(())
}
对于接收,我使用的是 python 服务器(但我也在 Rust 上进行了测试):
import zmq
if __name__ == '__main__':
context = zmq.Context()
socket = context.socket(zmq.SERVER)
socket.bind("tcp://0.0.0.0:5540")
print("waiting for hand shake")
m = socket.recv(copy=False)
print("got it...")
socket.send(b'READY', routing_id=m.routing_id)
print("sent reply")
socket.close()
context.term()
代码 1 在服务器端的输出:
waiting for hand shake
[blocked]
代码 2 在服务器端的输出:
waiting for hand shake
got it...
sent reply
将此版本用于 Rust:
[dependencies]
libzmq = "0.2.5"
解决方案
推荐阅读
- eclipse - Maven:无法扫描项目并从 CMD 或 Eclipse 执行
- html - 禁用选项在 Android 平板电脑上无法正常工作
- angular - 如何在 POST 后刷新 Angular 6 上的 observable
- apache-kafka - Storm KafkaSpout如何知道所有的bolts都被执行了
- amazon-s3 - Apache Flink - s3 文件夹监控 - 许多文件丢失
- spyder - spyder(python)不打开(实际上没有给出任何错误)
- deep-learning - 连接来自不同来源的编码器隐藏状态/单元/输出以进行注意力计算 - 问题?
- java - 为什么这个 Java 代理服务器很慢?
- sql - postgresql 查询找不到带有外来字母的结果
- java - 如何在 Android 中处理 MVVM 中的回调和状态