【问题标题】:Streamreader format issueStreamreader 格式问题
【发布时间】:2016-11-29 13:20:06
【问题描述】:

我创建了一个 UDP 客户端,它运行良好。数据以正确的格式返回(通过 wireshark 验证)。问题是我从 streamreader 收到的格式不是我所期望的。

这里是代码

private async void OnMessageReceived(DatagramSocket sender,     
 DatagramSocketMessageReceivedEventArgs args)
    {
        Debug.WriteLine("message recv");
        var result = args.GetDataStream();

        var resultStream = result.AsStreamForRead(1024);
        using (var reader = new StreamReader(resultStream))
        {
            string text = await reader.ReadToEndAsync();
            Debug.WriteLine(text);
        }
    }

这是wireshark数据

00 00 ff ff

这是我运行代码时生成的文本

"?\0\u0002\0?\0\0d\0\0\u0001\u0001\0\0??"

我假设它是格式问题。

【问题讨论】:

  • 非常不清楚您希望从 00 00 ff ff 字节作为字符串中得到什么。考虑提供minimal reproducible example - 您以字节数组形式接收的内联数据,并显示预期输出以及您获得的内容。
  • 从您的预期结果看来,您的数据是二进制流。为什么选择 StreamReader?
  • 我想将 00 00 ff ff 视为一个字符串。那是我的数据
  • 如果不是Streamreader,我应该用什么?
  • @user3363744:作为字符串...使用什么编码? UTF-8、UTF-16、UTF-32 都会以不同的方式解释这 4 个字节(字符串数据还有许多其他编码)。

标签: c# c#-4.0


【解决方案1】:

看看这个帖子:Extract Server Name Indication (SNI) from TLS client hello

特别是:

  • 当您对主机进行 utf8 编码时,主机是 utf8 编码和可读的 缓冲。
  • 主机前有一个字节,它决定了它的长度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2011-08-16
    相关资源
    最近更新 更多