我想通过移动应用程序将代码发送到移动标签打印机。 我必须使用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();
答案 0 :(得分:0)
首先想到:
打印机是否可能需要在消息之间使用分隔符?打印机如何知道预期长度的结束位置以及实际消息的开始位置?
例如,如果要打印的字符串是12345
,打印机如何从TCP消息512345
知道是否需要5个字符或51或512等?
另外,我认为如果Encoding.GetEncoding("Windows-1251").GetBytes(message).Length
未编码message
,则message
可能会提供与Windows-1251
中的字符数不同的数字。
您需要做的是:
message
转换为字节数组样品:
// 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);
最后(!),你应该考虑关闭你打开的资源!