9个版本

0.1.0-alpha.82023年10月5日
0.1.0-alpha.72023年9月5日
0.1.0-alpha.62023年8月11日
0.1.0-alpha.52023年6月6日
0.1.0-alpha.32023年3月25日

#517 in 网络编程

Download history 20/week @ 2024-03-31 1/week @ 2024-04-07 210/week @ 2024-04-14

每月 949 次下载

MIT 许可证

175KB
4K SLoC

utp

Rust库,用于uTorrent传输协议(uTP)

🚧 警告:建设中 🚧

此库目前不稳定,存在已知问题。请自行决定是否使用。

使用方法

use std::net::SocketAddr;

use utp_rs::conn::ConnectionConfig;
use utp_rs::socket::UtpSocket;
use utp_rs::udp::AsyncUdpSocket;

#[tokio::main]
fn main() {
	// bind a standard UDP socket. (transport is over a `tokio::net::UdpSocket`.)
	let socket_addr = SocketAddr::from(([127, 0, 0, 1], 3400));
	let udp_based_socket = UtpSocket::bind(socket_addr).await.unwrap();

	// bind a custom UDP socket. here we assume `CustomSocket` implements `AsyncUdpSocket`.
	let async_udp_socket = CustomSocket::new(..);
	let custom_socket = UtpSocket::with_socket(async_udp_socket).await.unwrap();

	// connect to a remote peer over uTP.
	let remote = SocketAddr::from(..);
	let config = ConnectionConfig::default();
	let mut stream = udp_socket::connect(remote, config).await.unwrap();

	// write data to the remote peer over the stream.
	let data = vec![0xef; 2048];
	let n = stream.write(data.as_slice()).await.unwrap();

	// accept a connection from a remote peer.
	let config = ConnectionConfig::default();
	let stream = udp_socket.accept(config).await;

	// read data from the remote peer until the peer indicates there is no data left to write.
	let mut data = vec![];
	let n = stream.read_to_eof(&mut data).await.unwrap();
}

依赖关系

~4–13MB
~146K SLoC