基于ASP.NET WebForms通过IP使用ESC/P打印至Brother P-Touch
解决Brother P-Touch P95NW原始指令打印无响应问题
核心问题分析
你当前的代码错误地将十六进制格式的文本字符串(如"1B 69 61...")直接以ASCII编码发送给打印机。打印机收到的是'1'、'B'、空格这类字符,而非指令对应的原始十六进制字节(比如0x1B代表ESC控制符),这是打印机无响应的根本原因。
修正后的代码实现
需要先将十六进制字符串转换为对应的字节数组,再通过Socket发送:
Dim clientSocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) clientSocket.Connect(New IPEndPoint(IPAddress.Parse(IP), 9100)) ' 处理十六进制字符串:移除空格和连字符 Dim hexString As String = "1B 69 61 00 1B 40 1B 69-6C D0 02 1B 24 3C 00 1B" & _ "6B 00 1B 58 36 41 74 20-69 6F 75 72 20 73 69 64" & _ "65 0C" hexString = hexString.Replace(" ", "").Replace("-", "") ' 将十六进制字符串转换为字节数组 Dim labelBytes As Byte() = New Byte(hexString.Length \ 2 - 1) {} For i As Integer = 0 To labelBytes.Length - 1 labelBytes(i) = Convert.ToByte(hexString.Substring(i * 2, 2), 16) Next ' 发送字节数组 clientSocket.Send(labelBytes) clientSocket.Close()
额外排查建议
- 验证指令参数匹配标签规格:你使用的是0.94英寸宽的标签,需确认手册中对应的标签宽度指令参数(比如示例中的
D0 02)是否与该规格匹配,避免因参数不兼容导致打印机静默丢弃指令。 - 抓包对比指令差异:使用Wireshark抓取P-Touch Editor打印时发送的数据包,对比你代码发送的字节流,确认是否存在指令缺失、参数错误或结尾符问题。
- 测试基础指令:先发送最简单的测试指令(如
ESC @即0x1B 0x40,用于初始化打印机),验证打印机是否有响应,逐步排查指令有效性。
内容的提问来源于stack exchange,提问作者SoundWaves
相关产品推荐
相关产品推荐

