【问题标题】:C# Sending request with SSL via TCP doesn't workC# 通过 TCP 使用 SSL 发送请求不起作用
【发布时间】:2014-09-03 00:06:24
【问题描述】:

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

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());

【问题讨论】:

  • “我从 stackoverflow 的答案中得到了这个,所以我很惊讶它不起作用。”网络上的大多数 TCP 内容都大错特错。小心……
  • “不起作用”是什么意思?
  • 它没有显示来自服务器的答案,当我调试我的程序时,它停在这条线bytes = sslStream.Read(buffer, 0, buffer.Length);附近,就停了。

标签: c# sockets ssl tcp


【解决方案1】:

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

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

发生的事情是ReadLine() 剥离了它返回的字符串中的"\r\n",因此在将其发送到服务器时您需要做的是添加回"\r\n",以便服务器知道命令已完成(它会等到它收到 EOL 序列后才会响应)。

你可以在SendRequest()做,你可以这样做:

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

【讨论】:

    猜你喜欢
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 2015-12-17
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2013-09-18
    相关资源
    最近更新 更多