VB.NET使用StreamWriter发送ASCII字符时接收端收到System.Byte[]问题求解
问题解决方案
核心错误原因
你代码的问题出在StreamWriter.Write方法的重载匹配逻辑上:StreamWriter是面向字符/字符串的文本写入器,本身的设计是自动处理字符到字节的编码转换。当你直接传入Byte数组参数时,会匹配Write(Object)重载,自动调用字节数组的ToString()方法,最终写入流的就是System.Byte[]这个字符串,而非你预期的ASCII字节序列。
修复方案
你可以选择以下任意一种方案修正代码:
- 方案1:直接使用NetworkStream写入字节数组,不需要额外封装StreamWriter
Public Sub sub_send(ByVal str_my_msg As String) Dim string_converted_to_ascii_chars As Byte() = Encoding.ASCII.GetBytes(str_my_msg) Dim my_stream As NetworkStream = my_client.GetStream() ' 调用流的Write方法直接写入字节数组,参数依次为字节数组、起始偏移、写入长度 my_stream.Write(string_converted_to_ascii_chars, 0, string_converted_to_ascii_chars.Length) my_stream.Flush() End Sub
- 方案2:保留StreamWriter使用逻辑,直接传入字符串由StreamWriter完成编码转换
Public Sub sub_send(ByVal str_my_msg As String) ' 初始化StreamWriter时指定ASCII编码,不需要手动转字节 stream_writer = New StreamWriter(my_client.GetStream, Encoding.ASCII) ' 直接写入原始字符串即可 stream_writer.Write(str_my_msg) stream_writer.Flush() End Sub
注意:ASCII编码仅支持0~127范围的字符,如果你的字符串包含中文、全角符号等超出ASCII范围的内容,编码时会自动替换为?字符,如有非ASCII字符传输需求,建议将编码替换为UTF-8。
内容的提问来源于stack exchange,提问作者Yans
相关产品推荐
相关产品推荐

