通过移动应用程序连接到打印机的TCP

时间:2013-02-04 09:53:39

标签: c# sockets mobile printing tcp

我想通过移动应用程序将代码发送到移动标签打印机。 我必须使用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();

1 个答案:

答案 0 :(得分:0)

首先想到:
打印机是否可能需要在消息之间使用分隔符?打印机如何知道预期长度的结束位置以及实际消息的开始位置?

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

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

您需要做的是:

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

    // 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);
    

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