赞
踩
前段时间小小学习了一下Rust的基础内容,出于学习Web开发的需求,也为巩固学过的Rust基础,就尝试记录一下自己学习 Rust Web 的点滴;
实现环境
OS: Ubuntu 14.0
IDE: PyCharm
本文为个人的学习随记,关于Rust的基础部分没有提及太多,难免出现某些细节上的疏漏,还请读者慎重参考;
目录
在自选的位置使用
cargo
创建初始项目,此处命名为pro1
;
进入项目目录,再创建两个子项目,分别为
tcpserver
、tcpclient
;
打开
pro1
中的Cargo.toml
文件,将子项目加入当前的工作空间内,具体如下:
进入子项目
tcpserver
,打开src
下 的mian.rs
文件;以下是具体的设计过程:
引入Rust自带的网络编程库
std::net::TcpListener
创建一个带有具体
IP:port
绑定的监听实例;
对于消息的接收,可有两种选择:
一种是只接受一次消息后即刻结束运行(实际不常用);
另一种是人为中断除外的无限循环接收,而这类方案是实际设计中更为所用的;
具体实现参考如下
一次性接收
循环接收
右式中的stream
属于std::result::Result<>
类型,因此需要使用unwrap()
进行简约的异常处理;
- use std::net::TcpListener;
-
- fn main() {
- let listener = TcpListener::bind("127.0.0.1:2333").unwrap();
- println!("Running on port 2333...");
-
- for stream in listener.incoming() {
- let _stream = stream.unwrap();
- println!("Connection established!");
- }
- }
以下是运行的效果;
进入子项目
tcpclient
,转到src/main.rs
;具体步骤如下:
引入Rust自带库
std::net::TcpStream
;创建一个数据流实例来连接指定地址的服务端;
- use std::net::TcpStream;
-
- fn main() {
- let stream = TcpStream::connect("127.0.0.1:2333").unwrap();
- }
Client
Server
由于所引入的网络编程库中实现了读写的 Trait,因此需要引入两个 Trait
std::io::{Read, Write}
TCP消息传送中的读写使用原始字节串形式;
- use std::net::TcpListener;
- use std::io::{Read, Write};
-
- fn main() {
- let listener = TcpListener::bind("127.0.0.1:2333").unwrap();
- println!("Running on port 2333...");
-
- for stream in listener.incoming() {
- let mut stream = stream.unwrap();
- println!("Connection established!");
-
- let mut buffer = [0; 1024];
- stream.read(&mut buffer).unwrap();
- stream.write(&mut buffer).unwrap();
- }
- }
客户端处需要额外进入库
std::str
- use std::net::TcpStream;
- use std::io::{Read, Write};
- use std::str;
-
- fn main() {
- let mut stream = TcpStream::connect("127.0.0.1:2333").unwrap();
- stream.write("Here's CLient End".as_bytes()).unwrap();
-
- let mut buffer = [0; 17]; // 此处的 17 是为配合消息的长度
- stream.read(&mut buffer).unwrap();
-
- println!("Response from server: {:?}",
- str::from_utf8(&mut buffer).unwrap() // utf-8编码形式接收
- );
- }
Server
Client
每一个不曾起舞的日子,都是对生命的辜负。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。