2013-08-05 121 views
2

我想在網頁上運行的javascript與運行在我的客戶端機器上的java SocketServer之間建立套接字通信,以便在兩者之間建立連接後,工作表在客戶機上打開。我知道它會導致安全問題,但由於通信將在本地主機上,所以我對此表示贊同。客戶端上的Java服務器和Javascript之間的Socket通信

這裏是我的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(); 

    } 
} 

這裏是我的HTML與JavaScript:

<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.那該怎麼辦呢?

+0

我不知道java_socket_bridge是什麼,但不能連接到運行在瀏覽器中的JavaScript的任意TCP套接字,只有HTTP。儘管你可以通過HTTP橋接TCP,但你在java中編寫的內容將不得不說HTTP,而不僅僅是一個普通的套接字。簡答:你不能。 – xaxxon

+0

@xaxxon我已更正我的代碼並刪除了java_socket_bridge行。所以你的意思是說,要做到這一點,我需要在java中建立一個HTTP套接字。讓我試試看。 – rahulserver

+0

在Web瀏覽器中運行的JavaScript只能啓動http連接。但是你可以使用ajax和websockets。然而,編寫你自己的服務器來做websocket是有挑戰性的。 – xaxxon

回答

1

你在泥濘的道路上,你需要讓自己在高速公路上。

在瀏覽器從主機獲取網頁和JavaScript的特定情況下,javascript可以與java代碼進行通信,然後將javascript連接回同一主機以獲取更多數據的連接。

就你而言,你希望同一臺機器既是客戶機又是服務器。但是,如果您意識到這種兩臺機器的概念,那麼理解所需要的就更容易了:運行瀏覽器的客戶機和運行java的服務器。

所以,你可以在網上找到很多這樣的例子。例如,看看運行在Tomcat中的Java,提供一個網頁和JavaScript,然後使用Tomcat服務器上的另一個URL讀取json數據。

如果您想到網絡技術的主流應用,您可以找到視頻展示您想看到的內容。例如,在AngularJS演示和RESTful Web服務演示中進行環顧。

+0

謝謝你回答。我問這個問題的時候是我剛開始專業編程的時候。現在我安靜了;) – rahulserver

相關問題