2016-02-16 3 views
0

Я пытаюсь реализовать простую программу WebSocket с использованием Java Web Application.Программирование WebSocket в Java: проблема связи с сервером клиентов

Однако не удалось установить связь между клиентом и сервером.

Может кто-нибудь мне помочь?

СерверWeb: Tomcat

код клиента: JSP/JavaScrip

<body> 
<div> 
    <input type="text" value="" id="message" /> <br /> <input 
     type="submit" value="Start" onclick="start()" /> 
</div> 
<div id="messages"></div> 
<script type="text/javascript"> 
    var webSocket; 
    var uri = 'ws://' + window.location.host + '/ZebraHosting/testwebsocket'; 
    alert('ur url is ' + uri); 
    function connect() { 

     if ('WebSocket' in window) { 
      alert('I am in Websocket in window'); 
      websocket = new WebSocket(uri); 
     } else if ('MozWebSocket' in window) { 
      websocket = new MozWebSocket(uri); 
      alert('I am in MozWebsocket in window'); 
     } else { 
      alert('WebSocket is not supported by this browser.'); 
      return; 
     } 

     webSocket.onerror = function(event) { 
      alert('I am onerror'); 
      onError(event); 
     }; 

     webSocket.onopen = function(event) { 
      alert('I am onopen'); 
      onOpen(event); 
     }; 

     webSocket.onmessage = function(event) { 
      alert('I am onmessage'); 
      onMessage(event); 
     }; 

     webSocket.onclose = function(event) { 
      alert('I am onclose'); 
      onClose(event); 
     }; 

    } 
    function onMessage(event) { 
     document.getElementById('messages').innerHTML += '<br />' 
       + event.data; 
    } 

    function onOpen(event) { 
     alert("function onOpen "); 
     document.getElementById('messages').innerHTML = 'Connection established'; 
    } 

    function onError(event) { 
     alert("Error ocurred "); 
    } 

    function start() { 
     alert("function start "); 
     webSocket.send(document.getElementById('message').value); 
     return false; 
    } 

    function onClose(event) { 
     alert("function onClose"); 
     document.getElementById('messages').innerHTML = 'Connection closed'; 
    } 

    connect(); 
</script> 

код сервера:

import java.io.IOException; 
import javax.websocket.OnClose; 
import javax.websocket.OnMessage; 
import javax.websocket.OnOpen; 
import javax.websocket.Session; 
import javax.websocket.server.ServerEndpoint; 

@ServerEndpoint("/testwebsocket") 
public class WebSocketTest { 

@OnMessage 
public void onMessage(String message, Session session) throws IOException, InterruptedException { 

    // Print the client message for testing purposes 
    System.out.println("Received: " + message); 
    // Send the first message to the client 
    session.getBasicRemote().sendText("replay from server for :" + message); 
} 

@OnOpen 
public void onOpen() { 
    System.out.println("Client connected"); 
} 

@OnClose 
public void onClose() { 
    System.out.println("Connection closed"); 
}} 
+0

так, что журналы печатаются на клиенте и сервере? – wero

+0

@wero Нет журналов на данный момент, я думаю, что ничего не работает после «function start()» –

+0

Я выложу вам завтра рабочий пример (если он еще не решен). – Gero

ответ

3

У вас есть опечатки в вашем коде: вы создаете объекты WebSocket и присваиваете их переменной websocket, но позже используйте переменную webSocket.

+0

Спасибо, что поймали, но все еще нет выхода. еще один вопрос, который у меня есть, - это класс сервера, это обычный Java-класс, в этом случае мне нужно развернуть файл войны каждый раз? поскольку то, что я делаю в настоящее время, просто выполняет указанную выше jsp-страницу из eclipse. –

+0

путем обновления Typo webSocket -> websocket, программа работает правильно. –

1

Я думаю, @ApplicationScoped аннотация отсутствует для серверного класса.

Смотрите этот учебник http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/HomeWebsocket/WebsocketHome.html

+0

Спасибо за подробный код, позвольте мне попробовать и протестировать. будет обратная связь в любом случае [PASS/FAIL] –

+0

привет Иван, обновив Typo webSocket -> websocket, программа работает правильно. –

+0

k, спасибо за обновление –

Смежные вопросы