2013-02-04 52 views
0

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

它期望的确切协议是什么?我要问的原因是'Write(int)'后跟'Write(string)'看起来很模糊;这只是“3abc”等......这看起来不正确(让我们希望消息不是以数字开头!)。我期望它可以在3之后有一个换行符,或者3代表这个长度的二进制编码。顺便说一句,'GetByteCount(message)'比'GetBytes(message).Length'便宜。在任何网络问题中,第一步是记录您发送的内容。不是你发送的信息 - 而是你发送的信息*。 –

+0

感谢您的回复,正如您在上面提到的那样:一旦我删除了发送长度信息,它将打印标签没有问题。 –

回答

0

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

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

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

你必须做的是:

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

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

+0

感谢您的快速回复,我发送给打印机的是打印机的脚本,它可以解释和打印标签,我已经尝试了您的建议,但它的响应与以前一样,调试没有问题,但打印机不打印标签! –

+0

你能描述协议吗? –

+1

@kubilaybayraktar这听起来像一个协议错误 - 即你没有发送它想要的东西。你需要阅读文档,看看它想要什么...... –

相关问题