通过TCP使用SSL发送请求不工作

本文关键字:请求 工作 TCP 使用 SSL 通过 | 更新日期: 2023-09-27 18:12:41

这是我的代码发送TCP请求编码在SSL和从服务器得到的答案,但它不工作。调试和尝试捕获异常不起作用。

public void SendRequest(string request)
{
    byte[] buffer = new byte[2048];
    int bytes = -1;
    sslStream.Write(Encoding.ASCII.GetBytes(request));
    bytes = sslStream.Read(buffer, 0, buffer.Length);
    Console.WriteLine(Encoding.ASCII.GetString(buffer, 0, bytes));
}

我从stackoverflow的答案,所以我很惊讶它不工作。这是我的代码,从服务器接收问候(它工作正常):

byte[] buffer = new byte[2048];
StringBuilder messageData = new StringBuilder();
int bytes = 0;
bytes = sslStream.Read(buffer, 0, buffer.Length);
Decoder decoder = Encoding.UTF8.GetDecoder();
char[] chars = new char[decoder.GetCharCount(buffer, 0, bytes)];
decoder.GetChars(buffer, 0, bytes, chars, 0);
messageData.Append(chars);
Console.Write(messageData.ToString());

通过TCP使用SSL发送请求不工作

如果sslStream.Read(buffer, 0, buffer.Length);挂起,这是因为服务器没有发送响应。

看看你在github上的代码(从你的其他问题链接),看起来你正在使用Console.ReadLine()读取命令,然后将它们写入你的网络流。

正在发生的事情是,ReadLine()剥离的"'r'n"在字符串中,它返回,所以你需要做什么,当发送到服务器是添加回"'r'n",使服务器知道命令完成(它等待,直到它得到一个EOL序列之前,它将响应)。

你可以做的是在SendRequest()中,你可以做:

sslStream.Write(Encoding.ASCII.GetBytes(request + "'r'n"));