1

我正在尝试与连接到 IP 地址 192.168.1.1 的示波器连接。它有一个内置的网络服务器,由于缺乏更好的词,很烂。它有很多iframes 并且只能在 IE 中完全工作。我正在构建一个开源 Web 应用程序,该应用程序可以轻松地与示波器交互并使用 HighcartsJS 实时显示波形。

无论如何,我正在尝试在 Internet Explorer 中运行此代码(即使我想在 Chrome 中运行它),但没有成功:

REMOVED BECAUSE IT HAD SILLY MISTAKES

当我在 Internet Explorer 中打开文件时,我确实看到 URL 被重写为 localhost,即使 localhost 不是 192.168.1.1。输入 localhost 会将我带到我的本地 Web 服务器(所以如果我能弄明白的话,我愿意使用 PHP 来做这个 POST)。

非常感谢任何见解。谢谢阅读。

编辑:这是来自 Wireshark 的 TCP 流:

POST /Comm.html HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: 192.168.1.1/Comm.html
Accept-Language: en-US
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Content-Type: text/plain
Accept-Encoding: gzip, deflate
Host: 192.168.1.1
Content-Length: 38
DNT: 1
Connection: Keep-Alive
Cache-Control: no-cache
COMMAND=CURVe?
gpibsend=Send
name=
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
MIME-Version: 1.0
Connection: close
Content-Type: text/html
Date: TUE --
Content-Length: 8506
<HTML>..NUMBERS/HTML CUT OUT TO SAVE SPACE....22,22,22,2</HTML>

到目前为止的结论:我意识到我的代码存在多个问题。但是,这有效:

$.ajax(
    {
        url: 'link',
        dataType: 'text',
        type: 'post',
        data: {command: 'BEL',
                gpibsend: 'Send'},
    })

但这不是:我正在尝试读取 TCP 跟踪中详细说明的响应:

$.ajax(
    {
        url: 'http://192.168.1.1/Comm.html',
        dataType: 'text',
        type: 'post',
        data: {command: 'ZOOM:HORIZONTAL:SCALE?',
                gpibsend: 'Send'},
        success: function(data)
        {
            window.alert(data)
        }
    })
4

2 回答 2

0

只是想跟进此事,以防有人在 Google 上遇到此问题。这里有多种选择:

  1. 在域上托管网站,编辑主机文件并将网站域的子域指向 LAN IP 地址

  2. 创建 VPN 并从静态 IP 地址访问所有机器

  3. 在禁用安全功能的情况下运行浏览器

  4. 如果您可以更改示波器上的域名服务器,则托管您自己的 DNS 并将任何给定地址解析为 LAN 连接

  5. 在您的计算机上运行 LAMP/WAMP 服务器并通过 PHP(从服务器)通过 AJAX 进行调用

于 2013-11-23T07:16:37.393 回答
0

大多数浏览器不允许使用 ajax 调用来访问该脚本来源的其他服务器。所以在你的脚本中似乎是错误的。

另一方面,我不明白为什么要指定服务器的整个 IP 地址。通常指向一个应该返回答案的文件应该没问题。

另一件事,网络服务器之王在该示波器上运行什么。我确实会问,因为它们不是常见的机器,尤其是使用网络服务器时。

此外,如果您想要实时更新,请不要使用 AJAX。使用网络套接字。你看,Ajax 基本上是对 Web 服务器的调用,就像调用网站一样,当我们想要创建一个必须非常快速地获取数据的应用程序时,这个过程非常长。因此,聪明人确实发明了用于浏览器的 WebSocket API。您会看到,套接字是直接连接,因此您必须实现自己的协议。但是用于与示波器通信,这可能意味着制作一个入侵内部软件的服务器文件,并且每 0.1 秒就会吐出一次数字。JS 会捕获这些数字,然后将另一个数据添加到结果表中,然后重新绘制整个图。

于 2013-06-11T22:23:10.007 回答