【问题标题】:Streamwriter not writing commands correctly to network stream [duplicate]Streamwriter 未将命令正确写入网络流 [重复]
【发布时间】:2021-01-28 17:42:42
【问题描述】:

我不确定这是怎么发生的,但我有一段代码可以简化为以下内容:

var tcpClient = CreateAndConnect();
var networkStream = tcpClient.GetStream();   
var streamWriter = new StreamWriter( networkStream, Encoding.UTF8 );
var msg = GetMessage(); 

//if i write this msg directly with this code block i will get a successful response
var bytes = Encoding.UTF8.GetBytes( msg );
await networkStream.WriteAsync( bytes, 0, bytes.Length ); 

//if instead i write to the streamwriter and flush it fails
streamWriter.Write( msg  );
streamWriter.Flush();

我检查了在wireshark中发送的数据包,它们实际上相差3个字节。我对数据包了解得不够多,无法知道究竟有什么区别,尽管我可以肯定地说,两者都包含完整的消息。

【问题讨论】:

标签: c# streamwriter networkstream


【解决方案1】:

正如 cmets 中所指出的,问题与字节顺序标记有关,它是一个 3 字节的代码,附加在字符串中,表示编码为 UTF8。

静态编码类 Encoding.UTF8 将字节顺序标记附加到 UTF8 字符串。解决方法是通过 new UTF8Encoding() 实例化一个新的编码类,除非明确告知,否则不会添加字节顺序标记。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多