2016-12-21 1 views
0

Так что я пытаюсь сделать какое-то соединение между моим Java-приложением и моим веб-приложением, я искал веб-сайты, и они выглядят очень просто и просто в использовании :). И я создал себе Java-сервер, который использует класс ServerSocket.Java Socket и JS WebSocket

Теперь проблема в том, что я могу подключиться к серверу из Интернета с помощью websocket, но я не могу отправить данные на сервер ... но когда я попытался отправить данные с 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

Сервер веб-сокет не то же самое как простой сервер сокетов. Сервер, предлагающий сетевые сокеты, должен сначала предлагать службы HTTP или HTTPS, поскольку веб-сокет устанавливается, когда веб-клиент отправляет HTTP-запрос с опцией обновления и специальными полями для создания веб-сокета. Даже после того, как веб-сокет установлен, соединение по-прежнему не ведет себя точно так же, как обычный сокет. Протокол Web Socket использует фреймы для отправки или получения данных. Все это значительно отличается от того, что вы ожидаете.

Еще одна вещь, о которой вы должны знать, заключается в том, что браузер будет применять правило, согласно которому веб-сокет должен поступать с того же хоста, что и страница, пытающаяся установить веб-сокет (тот же протокол, адрес и TCP-порт).

+0

ok thanks :), так что лучше всего найти java-библиотеку для связи с js websockets? правильно? –

+1

Вам нужно сделать еще один шаг и найти веб-серверную среду/библиотеку, которая поддерживает веб-сокеты. –

+0

ОК, я наконец понял использование http://socketo.me: D –