我正在尝试用c#构建中继服务器,它可以部署在一个服务器上,该服务器将接受来自网络上jpos应用程序的连接,然后将所有打印机命令中继到物理打印机“epsontm-t88iv”。
我可以从服务器连接到打印机,并在tcp端口9100上发送打印命令,但问题是,大多数(如果不是所有的jpos应用程序)都试图在打印之前声明打印机或获得对打印机的独占访问权“这是可以理解的”,您不希望打印收据时打印机变得凌乱。
为了测试,我使用“setuppos”工具,我从爱普生网站下载模拟jpos应用程序在我的机器上,而且服务器也在我的机器上“不知道这是否会导致问题”,这是正常工作时,直接连接到物理打印机。
首先,我有一个问题,从“checkhealth”工具与错误“端口名是非法的”,但后来我能够修复它,该问题是在编码的udp侦听器和/或udp客户端连接与物理打印机。
端口名是非法的!!堆栈跟踪!!jp.co.epson.pos.comm.v4_0001.commcontrolexception:端口名非法。在jp.co.epson.pos.comm.v4\u 0001.commonportio.throwcommonception(commonportio。java:201)在jp.co.epson.pos.comm.v4\u 0001.commonportio.throwcommonception(commonportio。java:190)在jp.co.epson.pos.comm.v40001.porthandlerio.portopen(porthandlerio。java:441)在jp.co.epson.pos.comm.v4\u 0001.portcontrol\u usbserialcompatible.openport(端口控制\u usbserialcompatible。java:135)在jp.co.epson.upos.core.v1\u 14\u 0001.pntr.commonprinterservice.openport(commonprinterservice。java:3334)在jp.co.epson.upos.core.v1\u 14\u 0001.pntr.commonprinterservice.claim(commonprinterservice。java:3103)在jpos.basejposcontrol.claim(未知源代码)位于checkhealthtool.checkhealthtool.executecheckhealth(未知源代码)位于checkhealthtool.checkhealthtool.checkhealthbutton\u单击checkhealthtool.checkhealthtool.actionperformed(未知源代码)位于javax.swing.abstractbutton.fireactionperformed(未知源代码)位于javax.swing.abstractbutton$handler.actionperformed(未知源代码)位于javax.swing.defaultbuttonmodel.fireactionperformed(未知源代码)位于javax.swing.plaf.basic.basicbuttonlistener.mousereleased(未知源代码)位于java.awt.component.ProcessMouseeEvent(未知源代码)位于javax.swing.jcomponent.processmouseevent(未知源)位于java.awt.component.processevent(未知源)位于java.awt.container.processevent(未知源)位于java.awt.component.dispatcheventimpl(未知源)位于java.awt.container.dispatcheventimpl(未知源)位于java.awt.component.dispatchevent(未知源)java.awt.lightweightdispatcher.retargetmouseevent(未知源)位于java.awt.lightweightdispatcher.processmouseevent(未知源)位于java.awt.lightweightdispatcher.dispatchevent(未知源)位于java.awt.container.dispatcheventimpl(未知源)位于java.awt.window.dispatcheventimpl(未知源)java.awt.eventqueue的java.awt.component.dispatchevent(未知源)java.awt.eventqueue的dispatcheventimpl(未知源)java.awt.eventqueue的access$500(未知源)java.awt.eventqueue$3的run(未知源)java.awt.eventqueue$3的run(未知源)java.security.accesscontroller.doprivileged(本机方法)atjava.security.protectiondomain$javasecurityaccessimpl.dointersectionprivilege(未知源)位于java.security.protectiondomain$javasecurityaccessimpl.dointersectionprivilege(未知源)位于java.awt.eventqueue$4.run(未知源)位于java.awt.eventqueue$4.run(未知源)位于java.security.accesscontroller.doprivileged(本机方法)位于java.awt.eventdispatchthread.PumpeEventForHierarchy(未知源)的java.awt.eventdispatchthread.PumpoEventForFilters(未知源)的java.security.protectiondomain$javasecurityaccessimpl.dointersectionprivilege(未知源)位于java.awt.eventqueue.dispatchevent(未知源)java.awt.eventdispatchthread.pumpevents(未知源)java.awt.eventdispatchthread.pumpevents(未知源)java.awt.eventdispatchthread.run(未知源)
现在我有另一个错误,说“端口已经打开(错误代码:106)”,我无法找到问题的根源,应该有一个连接到端口,这是通过我的应用程序。
端口已打开!!堆栈跟踪!!jp.co.epson.pos.comm.v4_0001.commcontrolexception:端口已打开。在jp.co.epson.pos.comm.v4\u 0001.commonportio.throwcommonception(commonportio。java:201)在jp.co.epson.pos.comm.v4\u 0001.commonportio.throwcommonception(commonportio。java:190)在jp.co.epson.pos.comm.v4\u 0001.porthandlerio.throwjnierrorexception(porthandlerio。java:1241)在jp.co.epson.pos.comm.v40001.porthandlerio.portopen(porthandlerio。java:389)在jp.co.epson.pos.comm.v4\u 0001.portcontrol\u usbserialcompatible.openport(端口控制\u usbserialcompatible。java:135)在jp.co.epson.upos.core.v1\u 14\u 0001.pntr.commonprinterservice.openport(commonprinterservice。java:3334)在jp.co.epson.upos.core.v1\u 14\u 0001.pntr.commonprinterservice.claim(commonprinterservice。java:3103)在jpos.basejposcontrol.claim(未知源代码)位于checkhealthtool.checkhealthtool.executecheckhealth(未知源代码)位于checkhealthtool.checkhealthtool.checkhealthbutton\u单击checkhealthtool.checkhealthtool.actionperformed(未知源代码)位于javax.swing.abstractbutton.fireactionperformed(未知源代码)位于javax.swing.abstractbutton$handler.actionperformed(未知源代码)位于javax.swing.defaultbuttonmodel.fireactionperformed(未知源代码)位于javax.swing.plaf.basic.basicbuttonlistener.mousereleased(未知源代码)位于java.awt.component.ProcessMouseeEvent(未知源代码)位于javax.swing.jcomponent.processmouseevent(未知源)位于java.awt.component.processevent(未知源)位于java.awt.container.processevent(未知源)位于java.awt.component.dispatcheventimpl(未知源)位于java.awt.container.dispatcheventimpl(未知源)位于java.awt.component.dispatchevent(未知源)java.awt.lightweightdispatcher.retargetmouseevent(未知源)位于java.awt.lightweightdispatcher.processmouseevent(未知源)位于java.awt.lightweightdispatcher.dispatchevent(未知源)位于java.awt.container.dispatcheventimpl(未知源)位于java.awt.window.dispatcheventimpl(未知源)java.awt.eventqueue的java.awt.component.dispatchevent(未知源)java.awt.eventqueue的dispatcheventimpl(未知源)java.awt.eventqueue的access$500(未知源)java.awt.eventqueue$3的run(未知源)java.awt.eventqueue$3的run(未知源)java.security.accesscontroller.doprivileged(本机方法)atjava.security.protectiondomain$javasecurityaccessimpl.dointersectionprivilege(未知源)位于java.security.protectiondomain$javasecurityaccessimpl.dointersectionprivilege(未知源)位于java.awt.eventqueue$4.run(未知源)位于java.awt.eventqueue$4.run(未知源)位于java.security.accesscontroller.doprivileged(本机方法)位于java.awt.eventdispatchthread.PumpeEventForHierarchy(未知源)的java.awt.eventdispatchthread.PumpoEventForFilters(未知源)的java.security.protectiondomain$javasecurityaccessimpl.dointersectionprivilege(未知源)位于java.awt.eventqueue.dispatchevent(未知源)java.awt.eventdispatchthread.pumpevents(未知源)java.awt.eventdispatchthread.pumpevents(未知源)java.awt.eventdispatchthread.run(未知源)
我试图找到jpos通信的源代码,找出printer claim是如何在幕后执行的,但我在网上找不到它。
我使用wireshark监视jpos应用程序和物理打印机之间的连接,并尝试对它们进行模拟,发现它在端口3289上使用udp,在端口161上使用snmp,在端口9100上使用tcp,在所有提到的端口上都实现了侦听器,但无法使其工作,我甚至没有在snmp侦听器上得到任何调用。
我有几个问题:
当checkhealth声明时,jpos应用程序是否需要直接连接到物理打印机?他们之间不可能有中继服务器吗?
JPO如何执行索赔?它是如何使用snmp协议的?
如果有开源项目具有相同的功能,甚至付费的第三方工具,你可以提供?
我很抱歉没有包括任何样本代码,将把他们如果要求。
任何帮助都将不胜感激。
谢谢您。
暂无答案!
目前还没有任何答案,快来回答吧!