所以我试图更好地理解简单的 TCP 服务器如何在 Rust 中工作。假设我有下面的简单 TCP 服务器。
use std::io::Write;
use std::net::TcpListener;
use std::thread;
fn main() {
let listener = TcpListener::bind("127.0.0.1:9123").unwrap();
println!("listening started, ready to accept");
for stream in listener.incoming() {
thread::spawn(|| {
let mut stream = stream.unwrap();
stream.write(b"Hello World\r\n").unwrap();
});
}
}
Run Code Online (Sandbox Code Playgroud)
服务器通过接受来自给定套接字的传入连接来工作。在生成所需线程后,您可以重新定义流变量,以便可以将其更改为您想要的任何内容。然后您可以随时写入该变量。
假设有一个如下所示的客户端:
use std::net::TcpStream;
//and any other imports that you need
fn main() {
let stream = TcpStream::connect("127.0.0.1:9123").unwrap();
//Then assume that you can read and write things back to the server
Run Code Online (Sandbox Code Playgroud)
我不明白的是每次建立连接时线程如何处理服务器。是不是就像设置多台服务器一样?如何处理进出服务器的数据包?您如何处理断开的连接?
所以我正在创建一个函数来获取向量的certatin元素并将它们存储到另一个向量中.每当我运行程序时,它会给出分段错误错误?为什么会发生这种情况,我如何解决问题,以免发生这种情况?
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void addition (vector <char> a, vector <string> b)
{
for (int i = 0; i < a.size(); ++i)
{
if (a[i] == '3')
{
b.push_back("3");
}
if (a[i] == '4')
{
b.push_back("4");
}
if (a[i] == '+')
{
b.push_back("+");
}
}
}
int main()
{
vector <char> v1 = {'3', '4', '+', '3', '4'};
vector <string> v2;
addition(v1, v2);
cout << v2[0] << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)