【问题标题】:Socket Communication between Java server on client and Javascript客户端上的 Java 服务器与 Javascript 之间的套接字通信
【发布时间】:2013-08-05 18:19:32
【问题描述】:

我想在网页上运行的 javascript 和我的客户端计算机上运行的 java SocketServer 之间建立套接字通信,以便在两者之间建立连接后,在客户端计算机上打开一个 Excel 工作表。我知道这会导致安全问题,但由于通信将在 localhost 上进行,所以我可以接受。

这是我在客户端上运行的 java 服务器:

import java.io.*;
import java.net.*;

public class ServerExcelOpenOnJavaScriptConnect {
    public static void main(String args[]) throws Exception {
        ServerSocket welcomeSocket = new ServerSocket(12345);


            Socket connectionSocket = welcomeSocket.accept();
            Process p =
                    Runtime.getRuntime()
                            .exec("C:\\Program Files (x86)\\Microsoft Office\\Office14\\excel.exe c:\\users\\rahulserver\\desktop\\abcd.xlsx");
            System.out.println("Waiting for excel file ...");
            p.waitFor();
            System.out.println("Excel file done.");

            //Runtime.getRuntime().exec();

    }
}

这是我用 javascript 编写的 html:

    <html>
<head>
    <title>TCP Socket test</title>
    <script type="text/javascript">
    function connect(){
                var host = 'localhost';
                var port = 12345;
        var socket = new io.Socket('localhost',{'port':12345});
        socket.connect();
        alert("connected");
}



    </script>
</head>

<body>
    <button onclick="connect()">Connect</button>
</body>
</html>

由于服务器一直在等待端口 12345 上的连接,连接没有建立。那么应该怎么做呢?

【问题讨论】:

  • 我不知道 java_socket_bridge 是什么,但你不能从浏览器中运行的 javascript 连接到任意 TCP 套接字,只能连接到 HTTP。虽然您可以通过 HTTP 桥接 TCP,但您在 java 中编写的内容必须使用 HTTP,而不仅仅是普通的套接字。简短的回答:你不能。
  • @xaxxon 我已经更正了我的代码并删除了 java_socket_bridge 行。所以你的意思是要让这个工作,我需要在java中建立一个HTTP套接字。让我试一试。
  • 在网络浏览器中运行的javascript只能发起http连接。但是你可以使用 ajax 和 websockets。然而,编写自己的服务器来做 websockets 是有挑战性的。
  • @xaxxon 所以你的意思是没有简单的方法让 javascript 与本地客户端机器上运行的任何东西进行通信?
  • 如果您的意思是不使用某种浏览器插件(如 java 或 flash),那么是的。这不难,这是不可能的。这是一个安全问题。

标签: java javascript sockets


【解决方案1】:

你在一条土路上,你需要让自己上高速公路。

在浏览器从主机获取网页和 javascript 然后 javascript 连接回同一主机以获取更多数据的连接的特定情况下,javascript 可以与 java 代码通信。

在您的情况下,您希望同一台机器既是客户端又是服务器。但是如果你意识到两台机器的想法就更容易理解需要什么:运行浏览器的客户端和运行 java 的服务器。

因此,您可以在网络上找到很多这样的示例。例如,看一下在 Tomcat 中运行的 java,提供网页和 javascript,然后 javascript 在 Tomcat 服务器上使用不同的 URL 读取 json 数据。

如果您想到网络技术的主流用途,您可以找到展示您希望看到的内容的视频。例如,查看 AngularJS 演示和 RESTful Web 服务演示。

【讨论】:

  • 感谢您的回答。我问这个的时候是我刚开始专业编程的时候。现在我很安静;)
猜你喜欢
  • 2016-10-26
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 2012-08-30
  • 2012-11-02
  • 1970-01-01
相关资源
最近更新 更多