- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 TLS (openssl) 实现客户端-服务器应用程序。我按照 rust doc 中给出的示例作为我的代码结构:example
服务器代码
fn handle_client(mut stream: SslStream<TcpStream>){
println!("Passed in handling method");
let mut data = vec![];
let length = stream.read(&mut data).unwrap();
println!("read successfully; size read:{}", length);
stream.write(b"From server").unwrap();
stream.flush().unwrap();
println!("{}", String::from_utf8_lossy(&data));
}
fn main() {
//remember: certificate should always be signed
let mut acceptor = SslAcceptor::mozilla_intermediate(SslMethod::tls()).unwrap();
acceptor.set_private_key_file("src/keyfile/key.pem", SslFiletype::PEM).unwrap();
acceptor.set_certificate_file("src/keyfile/certs.pem",SslFiletype::PEM).unwrap();
acceptor.check_private_key().unwrap();
let acceptor = Arc::new(acceptor.build());
let listener = TcpListener::bind("127.0.0.1:9000").unwrap();
for stream in listener.incoming(){
match stream{
Ok(stream)=>{
println!("a receiver is connected");
let acceptor = acceptor.clone();
//thread::spawn(move || {
let stream = acceptor.accept(stream).unwrap();
handle_client(stream);
//});
}
Err(_e)=>{println!{"connection failed"}}
}
}
println!("Server");
}
客户代码
fn main() {
let mut connector = SslConnector::builder(SslMethod::tls()).unwrap();
connector.set_verify(SslVerifyMode::NONE); //Deactivated verification due to authentication error
connector.set_ca_file("src/keyfile/certs.pem");
let connector = connector.build();
let stream = TcpStream::connect("127.0.0.1:9000").unwrap();
let mut stream = connector.connect("127.0.0.1",stream).unwrap();
stream.write(b"From Client").unwrap();
stream.flush().unwrap();
println!("client sent its message");
let mut res = vec![];
stream.read_to_end(&mut res).unwrap();
println!("{}", String::from_utf8_lossy(&res));
// stream.write_all(b"client").unwrap();
println!("Client");
}
服务器代码和客户端代码都编译没有问题,尽管有一些警告。客户端能够连接到服务器。但是当客户端将其消息 From Client 写入流时,
stream.read 在 handle_client() 中调用什么都不返回。此外,当服务器从服务器写入其消息时,客户端能够接收到该消息。
最佳答案
我猜你说 stream.read
什么都不返回,它返回一个零值,表示没有读取任何内容。
Read
特征 API 是这样说的:
This function does not provide any guarantees about whether it blockswaiting for data, but if an object needs to block for a read andcannot, it will typically signal this via an Err return value.
If n is 0, then it can indicate one of two scenarios:
This reader has reached its "end of file" and will likely no longer beable to produce bytes. Note that this does not mean that the readerwill always no longer be able to produce bytes.
The buffer specified was 0 bytes in length.
It is not an error if the returned value n is smaller than the buffersize, even when the reader is not at the end of the stream yet. Thismay happen for example because fewer bytes are actually availableright now (e. g. being close to end-of-file) or because read() wasinterrupted by a signal.
read
直到你收到你期望的所有字节,或者你得到一个错误。
read_exact
它将准确读取填充提供的缓冲区所需的字节数。
BufReader
,它提供了
read_until
等方法或
read_line
.
关于SslStream<TcpStream> 读取不返回客户端的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65878583/
当远程客户端未发送任何内容时,我遇到了 SSLStream 返回一些数据的问题。当服务器正在监听新命令时,我遇到了这个问题。如果服务器没有收到新的请求,ReadMessage() 函数应该捕获一个 I
我最近在将套接字通信转换为使用 System.Net.Security.SslStream 而不是 NetworkStream 时遇到了一个问题。此转换针对 .Net Framework 4.8 项目
我正在尝试使用 SslStream 和 TLS 1.2 协议(protocol)与远程服务器建立 TCP 连接。代码如下: _tcpClient.Connect(endPoint); var cert
我正在尝试使用 TLS (openssl) 实现客户端-服务器应用程序。我按照 rust doc 中给出的示例作为我的代码结构:example 服务器代码 fn handle_client(mut s
当我尝试从 SslStream 函数读取时,如果我没有设置连接超时,Read() 永远不会结束,但如果我设置了连接超时异常。这家伙有同样的问题http://msdn.microsoft.com/en-
我正在尝试通过 C# .Net 应用程序中的 SslStream 连接到服务器。 当我尝试向服务器进行身份验证时,我在客户端收到一条错误消息,显示从传输流中收到了意外的 EOF 或 0 字节。 在服务
我用 C# 制作了一个简单的 ftp 客户端,它可以满足我的需要(连接到 ftp,可以选择使用代理),但我也希望能够使用 AUTH SSL。 因此,我查看了 SslStream 而不是 Network
我有一个多线程异步System.Net.Socket,它监听一个端口。如果我收到来自 HTTP 的请求,我没有任何问题,但最近我不得不向我的应用程序添加 https 支持。 客户给了我一个.arm认证
我正在尝试编写一个客户端-服务器库,让我的 LAN 计算机相互通信。由于这在很大程度上是一种自学尝试,因此我试图通过 SSL 建立这些连接。我的计划是维护一台主机,并让每个客户端维护一个到主机的相互验
各位,我正在尝试写一些关于 SSL 的文章,这里是问题: 我在下面构建了一些东西: CA 证书(自制 CA) Server pfx, Server cert, Server key(由自制的CA签发到
我正在尝试对存在证书交换的客户端进行身份验证。我遇到的问题是 openssl 客户端拒绝连接尝试,因为身份验证握手中没有包含任何证书颁发机构。 这对于在 Windows Server 2008 R2
我正在尝试连接到 SSL TCP 服务器,它可以在我的浏览器上运行,并且我可以收到硬编码的响应。在应用程序上,当使用 ReadLine 函数时抛出异常。 Error: System.ArgumentE
伙计们,我正在使用 SslStream 作为服务器来测试我的应用程序,但我在从流中读取时遇到了问题。我正在使用以下代码: while (true) {
我正在设计一个基于客户端服务器架构的系统 - 基于 TCP。要求服务器和客户端之间的所有消息都应该加密。所以我正在考虑在 .NET Framework 中使用 SslStream 类。 从 SslSt
我有这个代码: string certificateFilePath = @"C:\Users\Administrator\Documents\Certificate.pfx"; string cer
我看了很长时间的 MSDN 信息文章,但我仍然无法理解。 基于不需要客户端身份验证的假设: 1.当我调用SslStream.AuthenticateAsServer(...)时,我是在服务器端还是在客
我对处理套接字时“最好”使用什么感到困惑。 Socket 对象提供 Send/Receive 方法(和异步等效方法),但也允许创建 NetworkStream。我对使用 Socket.Send 感到高
我正在开发 C# SSL 客户端。 这是单向证书验证。我的客户需要进行服务器证书验证。 我已将 RemoteCertificateValidationCallback 添加到 SslStream。 目
我目前正在尝试使用 TcpClient 连接到 FTP 服务器。 为了使用 FTPS 作为协议(protocol),我通过 NetworkStream 处理一个单独的方法,该方法使用该方法创建一个 S
当使用 SSLStream 向(已经过身份验证的)客户端发送“大”数据 block (1 兆)时,我看到的数据包碎片/分解是 远大于使用普通 NetworkStream 时。 在客户端使用异步读取(即
我是一名优秀的程序员,十分优秀!