连接到TM-U220时出错

时间:2016-09-13 06:05:24

标签: javascript html printing epson

我已经为支持TM-U220的Epson打印机下载了2个javascript SDK,它们都无法连接到我的打印机而且无法打印。但是当我尝试使用其他SDK如QZ Tray时,它可以工作,但QZ托盘必须打开,我希望这在android中工作,所以我使用Epson的javascript SDK。

问题是当我使用Epson在javascript SDK中提供的打印机样本并输入ip:192.168.1.98,port:9100和device id:local_printer时,我收到此错误:

  连接到ePOS设备服务接口的

失败。 [ERROR_TIMEOUT]


但打印机做了一个小的打印,我无法阅读的信,并在印刷的最后: 2http / 1.1 。在控制台中:

  

选项https://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000 net :: ERR_CONNECTION_REFUSED



  

选项https://192.168.1.98/cgi-bin/eposDisp/service.cgi?devid=local_display&timeout=10000 net :: ERR_CONNECTION_REFUSED


我也创建了自己的简单代码。 这是我使用 epos-2.3.0.js 的第一个代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Print Test</title>

        <script type="text/javascript" src="epos-2.3.0.js"></script>

        <script type="text/javascript">
            // Retrieving Printer objects (printer selection)
            var printer = null;
            // Retrieving Printer objects (printer selection)

            // Creating ePOSDevice objects (device connection and communication)
            var ePosDev = new epson.ePOSDevice();

            function connect() {
                var ipAddress = '192.168.1.98'; var port = '9100';
                ePosDev.connect(ipAddress, port, callback_connect);
            }
            // Creating ePOSDevice objects (device connection and communication)

            // Retrieving Printer objects (printer selection)
            function callback_connect(resultConnect) {
                var deviceId = 'local_printer';
                var options = {'crypto' : false, 'buffer' : false};

                if ((resultConnect == 'OK') || (resultConnect == 'SSL_CONNECT_OK')) {
                    // Retrieves the printer object
                    alert("Success callback connect");
                    ePostDev.createDevice(deviceId, ePosDev.DEVICE_TYPE_PRINTER, options, callback_createDevice);
                }
                else {
                    // Displays error messages
                    alert("Error callback connect");
                }
            }

            function callback_createDevice(deviceObj, errorCode) {
                if (deviceObj === null) {
                    // Displays an error message if the system fails to retreive the printer object
                    return;
                }
                printer = deviceObj;

                // Registers the print complete event
                printer.onreceive = function(response) {
                    if (response.success) {
                        // Displays the successful print message
                        alert("Callback create device response success");
                    }
                    else {
                        // Displays error messages
                        alert("Callback create device response failed");
                    }
                }
            }
            // Retrieving Printer objects (printer selection)

            // Creating print data (data buffering)
            function createData() {
                printer.addTextAlign(printer.ALIGN_CENTER);
                printer.addText('Hello World\n');
            }
            // Creating print data (data buffering)

            // Sending print data (printing and disconnection)
            function send() {
                if (ePosDev.isConnected) {
                    printer.send();
                }
            }
            // Sending print data (printing and disconnection)
        </script>
    </head>
    <body>
        <input type="button" onclick="connect()" value="Connect" />
        <input type="button" onClick="send()" value="Print Hello World" />
    </body>
</html>


而这个我正在使用 epos-print-3.2.0.js

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Print Test 2</title>
        <script type="text/javascript" src="epos-print-3.2.0.js"></script>
        <script type="text/javascript">
            function buildMessage() {
                // Create a print document
                var builder = new epson.ePOSBuilder();
                builder.addTextLang('en');
                builder.addTextSmooth(true);
                builder.addTextFont(builder.FONT_A);
                builder.addTextSize(3, 3);
                builder.addText('Hello,\tWorld!\n');
                builder.addCut(builder.CUT_FEED);
                var request = builder.toString();

                var address = 'http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000';

                // Create an ePOS-Print object
                var epos = new epson.ePOSPrint(address);
                //Send the print document
                epos.send(request);
            }
        </script>
    </head>
    <body>
        <button onclick="buildMessage()">Run</button> 
    </body>
</html>

当我运行第二个代码时,我在控制台中出现了这个错误:

  

选项http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000



  

XMLHttpRequest无法加载http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000。对预检请求的响应未通过访问控制检查:否   请求中存在“Access-Control-Allow-Origin”标头   资源。因此不允许原点'null'访问。响应   有HTTP状态代码405。


但是当我从地址改变地址时 http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000

http://192.168.1.98:9100/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000
它给我打印了这个:

  

选项/cgi-bin/epos/service.cgi?devid=local-printer&timeout=10000   HTTP / 1.1
主机:192.168.1.98:9100
连接:keep-alive访问控制请求方法:POST
原点:null
  User-Agent:Mizilla / 5.0(Windows NT 6.3; WOW64)AppleWebKit / 537.36   (KHTML,像Gecko一样)Chrome / 52.0.2743.116 Safari / 537.36
  Access-Control-Request-Headers:内容类型,if-modified-since,   soapaction(接受):* / *
Accept-Encoding:gzip,   deflate,sdch
Accept =语言:en-US,en; q = 0.8

4 个答案:

答案 0 :(得分:0)

从它的角度来看,这是一个跨源HTTP请求问题(CORS)。这篇MDN文章解释了这一点:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

我猜测IP 92.168.1.98是打印机IP(位于本地网络上)。请参阅:http://trendblog.net/ever-wondered-use-192-168-x-x-ip-addresses-home/,您可以通过上面的帖子中描述的端口9100访问它。

因此,由于您的实际Web应用程序驻留在与打印机IP不同的IP和Web工作方式上,因此在调用其他IP /主机时需要CORS,以防止跨站点脚本攻击。

常识是,如果打印机通过端口9100暴露自己,您应该将其作为URI的一部分。这就是http://192.168.1.98:9100/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000工作而另一个没工作的原因。

至于试图通过Android设备访问它...问题是设备是加入您的本地网络(192.168 ....)还是在互联网上?如果它加入互联网,我不认为你可以访问可能不会暴露在互联网上的打印机(拥有公共IP)。只要他们属于同一个网络,他们就应该能够交谈。如果没有,你需要将它暴露在互联网上(不好主意)或确保他们可以看到对方(Android连接到你的公司WIFI,打印机可以通过WIFI到达)。

答案 1 :(得分:0)

我在新的TM-T88VI上遇到了同样的错误。然后我在ePOS SDK用户手册中看到,为了控制TM打印机,您需要在打印机上的EpsonNet Config中启用ePOS-Print设置。

查看本手册以直接控制TM-U220(不使用TM智能打印机),您需要安装UB-E04或UB-R04网络接口。它说您可以通过打印状态表来检查安装了哪些接口。

答案 2 :(得分:0)

我对TM-T20III有同样的问题。您必须为打印机使用Epson的实用程序软件。在高级网络设置中,有一个菜单称为“过滤器”,我将POS的IP地址添加为接受地址。

答案 3 :(得分:0)

但是当我更改地址时 http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000http://192.168.1.98:9100/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000 它打印了我这个:

端口9100是打印机的原始输入端口,似乎可以在不解释的情况下打印整个输入请求。 ePOS服务似乎在端口80/443上可用。

我在购买新的TM-T88VI时遇到相同的错误。然后我在《 ePOS SDK用户手册》中看到,要控制TM打印机,您需要从打印机的EpsonNet Config中启用ePOS-Print设置。

启用ePOS打印服务对我来说是正确的解决方案。为此,我必须更新打印机的固件(TM-T88VI)。在出厂默认设置下,没有选项可以打开ePOS服务。