微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Streamwriter无法将命令正确写入网络流

如何解决Streamwriter无法将命令正确写入网络流

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

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,bytes.Length ); 

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

我检查了在Wireshark中发送的数据包,实际上它们相差3个字节。我对数据包的了解还不够,以至于确切知道两者之间的区别是什么,尽管我可以肯定地说,两者都有完整的消息。

解决方法

正如评论中指出的那样,该问题与字节顺序标记有关,这是一个3字节代码,位于字符串之前,表示编码为UTF8。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。