0

我想通过移动应用程序将代码发送到移动标签打印机。我必须通过 TCP 连接来做到这一点。虽然 Windows 桌面应用程序的 tcp 连接和打印都可以,但它对移动应用程序没有任何作用。单击连接按钮后,它会连接到打印机并毫无问题地发送文本,但打印机没有响应!

感谢任何建议

这是代码

private static NetworkStream stream;
private static TcpClient client;
if (client == null)
{
    client = new TcpClient();
    int port = int.Parse(strPort);
    client.Connect(server, port);
}
stream = client.GetStream();
StreamWriter writer = new StreamWriter(stream, Encoding.GetEncoding("Windows-1251")); 
writer.AutoFlush = false;
writer.Write(Encoding.GetEncoding("Windows-1251").GetBytes(message).Length); 
writer.Write(message);
writer.Flush();
4

1 回答 1

0

第一个想法:
打印机是否可能需要消息之间的分隔符?打印机如何知道预期长度的结束位置和实际消息的开始位置?

例如,如果要打印的字符串是12345,打印机如何从 TCP 消息中512345知道是期望 5 个字符还是 51 或 512 等?

另外我认为,如果不在编码中,则可能会Encoding.GetEncoding("Windows-1251").GetBytes(message).Length提供与其中的字符数不同的数字。messagemessageWindows-1251

你需要做的是:

  1. 转换message为字节数组
  2. 从中确定长度并发送字节数组

样本:

// Convert message to byte array in Windows 1251 encoding
// Get a byte array that contains the length of messageBytes as string
byte[] messageBytes = Encoding.GetEncoding("Windows-1251").GetBytes(message);
byte[] messageBytesLengthBuffer = Encoding.UTF8.GetBytes(messageBytes.Length.ToString());

stream = client.GetStream();
stream.Write(messageBytesLengthBuffer, 0, messageBytesLengthBuffer.Length);
stream.Write(messageBytes, 0, messageBytes.Length);

最后(!),您应该真正考虑关闭您打开的资源!

于 2013-02-04T10:22:14.953 回答