【发布时间】:2021-01-26 00:20:59
【问题描述】:
我需要实现TCP服务器,它存储一个变量M。开始时,M = 1。 但是,当服务器和客户端之间建立连接时,客户端发送另一个变量 N 的值,服务器必须执行下一步:M = M * N。并将该值返回给客户端。 服务器必须保存变量 M 的新值! 并且,当下一个新客户端设置连接时,它将使用新的变量值。 示例:
- 服务器:M = 1;客户:N = 5;服务器:M = 5;
- 服务器:A = 5;客户:N = 8;服务器:M = 40;
这是我的服务器代码。它以这种方式工作:(不保存新值) 示例:
- 服务器:M = 1;客户:N = 5;服务器:M = 5;
- 服务器:A = 1;客户:N = 8;服务器:M = 8;
也许我应该做一个全局变量?或者关于它的东西......给我一些建议。谢谢。
fn handle_client(mut stream: TcpStream, a:&mut i32) {
let mut data = [0 as u8; 30]; // using 30 byte buffer
while match stream.read(&mut data) {
Ok(size) => {
if size>0{
let temp = str::from_utf8(&data[0..size]).unwrap().to_string();
let temp: i32 = temp.trim().parse().unwrap();
*a = *a * temp;
let st = a.to_string();
// String в u8
let data = st.as_bytes();
stream.write(&data).unwrap();
}
true
},
Err(_) => {
println!("An error occurred, terminating connection with {}", stream.peer_addr().unwrap());
stream.shutdown(Shutdown::Both).unwrap();
false
}
} {}
}
fn main() {
let listener = TcpListener::bind("0.0.0.0:7956").unwrap();
let mut a: i32 = 1;
// accept connections and process them, spawning a new thread for each one
println!("Server listening on port 7956");
println!("A = 1");
for stream in listener.incoming() {
match stream {
Ok(stream) => {
println!("New connection: {}", stream.peer_addr().unwrap());
thread::spawn(move|| {
// connection succeeded
handle_client(stream, &mut a)
});
}
Err(e) => {
println!("Error: {}", e);
/* connection failed */
}
}
}
// close the socket server
drop(listener);
}
【问题讨论】: