You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:24:04