gpt4 book ai didi

rust - 如何通过Rust中的Unix套接字发送和收听数据?

转载 作者:行者123 更新时间:2023-12-03 11:33:16 24 4
gpt4 key购买 nike

我正在尝试使用unix套接字在node.js和rust之间进行通信。我想同时通过rust脚本收听和发送消息,但是从字面上看,我在互联网上找到的每个示例都显示了如何进行操作(监听或发送)或使用第三方工具。

我试图在连接后立即向客户端发送一条消息,但是它没有这样做。 (在“获得客户”消息后停止)

use std::os::unix::net::{UnixStream,UnixListener};
use std::io::prelude::*;

fn main() -> std::io::Result<()> {
let listener = UnixListener::bind("/tmp/rst.sock")?;

match listener.accept() {
Ok((socket, addr)) => {
let mut stream = UnixStream::connect("/tmp/rst.sock")?;
println!("Got a client: {:?} - {:?}", socket, addr);
stream.write_all(b"hello world")?;
let mut response = String::new();
stream.read_to_string(&mut response)?;
println!("{}", response);
},
Err(e) => println!("accept function failed: {:?}", e),
}
Ok(())
}

最佳答案

调用UnixStream::connect时,您尝试打开的第二个连接从rust代码循环到其自身,但是该第二个连接从未被接受,因为您的代码仅接受一次并且它已经接受了来自Node的连接。

相反,您应该直接使用accept返回的套接字:

use std::os::unix::net::UnixListener;
use std::io::prelude::*;

fn main() -> std::io::Result<()> {
let listener = UnixListener::bind("/tmp/rst.sock")?;

match listener.accept() {
Ok((mut socket, addr)) => {
println!("Got a client: {:?} - {:?}", socket, addr);
socket.write_all(b"hello world")?;
let mut response = String::new();
socket.read_to_string(&mut response)?;
println!("{}", response);
},
Err(e) => println!("accept function failed: {:?}", e),
}
Ok(())
}

关于rust - 如何通过Rust中的Unix套接字发送和收听数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60558757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com