2014-01-19 79 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

相關問題