1. 服务器
1.1 监听未使用的 TCP/IP
端口
实例中,程序将监听显示在控制台上的端口,直到一个请求被发出。当将端口设置为 0 时,SocketAddrV4
会分配一个随机端口。
use std::io::{Error, Read}; use std::net::{Ipv4Addr, SocketAddrV4, TcpListener};
fn main() -> Result<(), Error> { let loopback = Ipv4Addr::new(127, 0, 0, 1); let socket = SocketAddrV4::new(loopback, 0); let listener = TcpListener::bind(socket)?; let port = listener.local_addr()?; println!("在{}上监听,访问这个端口结束程序", port); let (mut tcp_stream, addr) = listener.accept()?; println!("收到连接! {:?} 正在发送数据。", addr); let mut input = String::new(); let _ = tcp_stream.read_to_string(&mut input)?; println!("{:?} 说 {}", addr, input); Ok(()) }
|
交互步骤如下:
在127.0.0.1:35963上监听,访问这个端口结束程序
|
-
- 新启命令终端,运行
telnet 127.0.0.1 35963
(设命令终端为B),输出
Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'.
|
在127.0.0.1:35963上监听,访问这个端口结束程序 收到连接! 127.0.0.1:56962 正在发送数据。
|
-
- 在客户端(即终端B)上输入信息“你好”后,按
Ctrl+]
键进入 telnet
的命令模式,然后输入 quit
关闭连接。这样,telnet
客户端会发送一个正常的关闭连接请求,服务器就能收到数据并打印出来了:
Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 你好 ^] telnet> quit Connection closed.
|
在127.0.0.1:35963上监听,访问这个端口结束程序 收到连接! 127.0.0.1:56962 正在发送数据。 127.0.0.1:56962 说 你好
|