通过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());
如果sslStream.Read(buffer, 0, buffer.Length);
挂起,这是因为服务器没有发送响应。
看看你在github上的代码(从你的其他问题链接),看起来你正在使用Console.ReadLine()
读取命令,然后将它们写入你的网络流。
正在发生的事情是,ReadLine()
剥离的"'r'n"
在字符串中,它返回,所以你需要做什么,当发送到服务器是添加回"'r'n"
,使服务器知道命令完成(它等待,直到它得到一个EOL序列之前,它将响应)。
你可以做的是在SendRequest()
中,你可以做:
sslStream.Write(Encoding.ASCII.GetBytes(request + "'r'n"));