2016-12-21 11 views
0

私はJavaアプリケーションとWebアプリケーションの間に何らかの接続を作ろうとしています。私はWebソケットを探しました。そして私はServerSocketクラスを使用するJava Serverを自分で作成しました。JavaソケットとJS WebSocket

問題はwebsocketを使用してWebからサーバーに接続できますが、サーバーにデータを送信できません...しかし、Javaクライアントからデータを送信しようとすると、罰金...何が問題だろうか?

私のJava/Scalaの(私はこのチュートリアルの後:https://www.tutorialspoint.com/java/java_networking.htmを)サーバー:

class Server(val port: Int) extends Thread { 

    private val serverSocket = new ServerSocket(port) 

    override def run(): Unit = { 
    try { 
     while(true) { 
     println("Waiting for client on port: " + serverSocket.getLocalPort) 
     val server = serverSocket.accept() 

     println(server.getRemoteSocketAddress) 
     val in = new DataInputStream(server.getInputStream()) 
     println(in.readUTF()) 
     val out = new DataOutputStream(server.getOutputStream()) 
     out.writeUTF("Hello world!") 
     server.close() 
     } 
    } catch { 
     case s: SocketTimeoutException => println("Connection timed out!"); 
     case e: Exception => e.printStackTrace() 
    } 
    } 
} 

マイウェブJS(私はhttps://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applicationsに続い):

/** 
* Created by samuelkodytek on 20/12/2016. 
*/ 
var conn = new WebSocket('ws://127.0.0.1:8080'); 

conn.onopen = function(e) { 
    console.log("Connection established!"); 
    conn.send("Hello!"); 
}; 

conn.onmessage = function(e) { 
    console.log(e.data); 
}; 

答えて

3

ウェブソケットサーバは同じものではありませんシンプルなソケットサーバーとして。 Webソケットを提供するサーバーは、Webクライアントがアップグレードオプション付きのHTTP要求とWebソケットを確立するための特別なフィールドを送信するときにWebソケットが確立されるため、最初にHTTPまたはHTTPSサービスを提供する必要があります。 Webソケットが確立された後でも、接続は通常のソケットとまったく同じように動作しません。 Webソケットプロトコルはフレームを使用してデータを送受信します。これはあなたが期待しているものとはかなり異なっています。

注意しなければならないもう1つのことは、WebソケットがWebソケットを確立しようとしているページと同じホストから来なければならないというルールをブラウザが強制するということです(同じプロトコル、アドレス、 TCPポート)。

+0

okありがとう:)私の最善の策は、js websocketsとの通信のためのJavaライブラリを見つけることです?右? –

+1

さらに進んで、WebソケットをサポートするWebサーバー環境/ライブラリを見つける必要があります。 –

+0

OK、私は最終的に使用法を理解していますhttp://socketo.me:D –