2014-01-19 49 views
-1

我有一台集成了打印服务器的HP Laserjet 2550n,连接到192.168.1.100上的本地网络。不幸的是,告诉你墨粉状态等的客户端“工具箱”软件只能在Windows XP下运行。我已经使用Wireshark来监听通信,使用旧的XP机器,并且希望编写我自己的小程序(python下的概要文件)以接收与打印机有关的所有信息的xml。我设法使用Putty以“RAW”连接到192.168.1.100:9220来重复下面的通信并接收XML(我没有附加整个XML,仅仅是开头)。Python套接字与惠普打印服务器通信

我挣扎着从哪里开始与python。我使用了一个简单的套接字客户端来建立管道,并且socket.recv向我发送了第一行(220 JetDirect GGW ...)。当我socket.send(字节(“时间600”,“UTF-8”)),然后尝试再次接收,交互式shell“冻结”。

我真的很感激任何关于如何让python与打印服务器进行如下对话的指针。非常感谢!

220 JetDirect GGW server (version 2.0) ready 
SERV HP-DC-WEB 
250 96 HP-DC-WEB 
TIME 600 
200 OK 
DEVI 
255 MFG:Hewlett-Packard;CMD:PJL,PML,BIDI-ECP,MLC,PCL,POSTSCRIPT,PCLXL;MDL:hp color LaserJet 2550 series;CLS:PRINTER;DES:Hewlett-Packard color LaserJet 2550 series;MEM:MEM=57MB;1284.4DL:4d,4e,1;COMMENT:RES=600x2; 
OPEN 96 
200 OK 
DATA 
200 OK 
GET /hp/device/info_device_status.xml HTTP/1.1 
HOST:localhost:5225 
USER-AGENT:hp Proxy/2.5 
CONTENT-LENGTH:0 

HTTP/1.1 200 OK 
Server: Virata-EmWeb/R6_0_1 
Transfer-Encoding: chunked 
Content-Type: text/xml 
Expires: Thu, 01 Jan 1970 00:00:00 GMT 
Cache-Control: no-cache 
Pragma: no-cache 

0000013f 
<?xml version="1.0" encoding="UTF-8" ?>...</xml> 
+1

你的Python代码在哪里?你给了我们2个片段? – 2014-01-19 22:23:26

回答

1

这是很难调试代码没有看到两个以上的微小片段,但我有一个猜测:

socket.send(bytes("TIME 600","UTF-8")) 

,只有一行存在。这似乎是一个基于行的协议。所以大概服务器正在等待线路的其他部分,这是永远不会到来的,因此它永远不会发送任何回应,因此您的下一个recv只会永远封锁。

值得一提的是,该协议可能需要\r\n而不仅仅是\n,特别是如果该设备与Windows中心一样。


同时,sockets are byte streams, not message streams;不保证发送您的全部信息;不保证从另一端收到完整的消息。直到你有一个完整的行使用sendall而不是send,并且或者遍历recv,甚至更简单,只需使用makefile

为您简单的应用程序,你可以很容易地解决这个问题。

+1

非常感谢abarnert!这正是我一直在寻找的,如果我没有包含更多的代码,我很抱歉。给字符串添加“\ n”有帮助,现在我得到了我正在等待的返回字符串。也使用了makefile和sendall,它们在基于行的协议中是有意义的。问题解决了! – Pinocchio

相关问题