2014-10-29 2 views
0

У меня есть clientendpoint класс для websocket в tomcat 7.0.53. Он базируется этого примера на сайте https://blog.openshift.com/how-to-build-java-websocket-applications-using-the-jsr-356-api/Tomcat clientendpoint websocket продолжает закрываться

import java.io.IOException; 
import java.net.URI; 
import java.util.ArrayList; 

import javax.websocket.ClientEndpoint; 
import javax.websocket.CloseReason; 
import javax.websocket.ContainerProvider; 
import javax.websocket.DeploymentException; 
import javax.websocket.OnClose; 
import javax.websocket.OnError; 
import javax.websocket.OnMessage; 
import javax.websocket.OnOpen; 
import javax.websocket.Session; 
import javax.websocket.WebSocketContainer; 
@ClientEndpoint 
public class connect { 
    private static ArrayList<Session> sessionList = new ArrayList<Session>(); 

    public connect(URI endpointURI) throws DeploymentException, IOException 
    { 
     WebSocketContainer container = ContainerProvider.getWebSocketContainer(); 
     container.connectToServer(this, endpointURI); 
    } 

    @OnOpen 
    public void onOpen(Session session) throws IOException 
    { 
     sessionList.add(session); 
     System.out.println(session.getId()); 
     session.getBasicRemote().sendText("hello"); 
    } 

    public void sendMessage(String message) throws IOException 
    { 
     for(Session session : sessionList){ 
      //asynchronous communication 
      session.getBasicRemote().sendText(message); 
     } 
    } 

    @OnClose 
    public void onClose(Session session){ 
     sessionList.remove(session); 
     System.out.println("here"); 
    } 

    @OnError 
    public void onError(Throwable t, Session session){ 
     System.out.println("tedt"); 
    } 
} 

Я тогда следующий код для запуска клиента конечной

import java.io.IOException; 
import java.net.URI; 
import java.net.URISyntaxException; 

import javax.websocket.DeploymentException; 


public class test { 

    public static void main(String[] args) throws DeploymentException, IOException, URISyntaxException { 
     // TODO Auto-generated method stub 
     connect connect = new connect(new URI("ws://localhost:8080/example/talk")); 
     connect.sendMessage("now"); 
    } 

} 

Клиент не удается успешно подключиться к серверу WebSocket, однако затем он получает когда я пытаюсь отправить сообщение или что-то сделать, я знаю это, поскольку функция onError вызывается при попытке отправить сообщение из функции onOpen. Почему закрывается websocket сразу после его подключения к серверу?

ответ

2

Вы отсоединяетесь, потому что ваш основной поток в клиентском приложении заканчивается. После того, как вы отправите «сейчас», ваша программа просто выйдет. Если вы хотите сделать что-нибудь еще (например, дождаться ответа от сервера, например), вам придется не допустить выхода основного потока. Попробуйте что-то вроде этого в конце вашего метода main:

System.in.read(); 

Это заставит ваш процесс, чтобы сидеть и ждать ввода от стандартного ввода. Просто дождитесь завершения теста и нажмите клавишу ВВОД в командной строке, чтобы завершить работу с клиентом.

Вы, конечно же, захотите зарегистрировать обработчик для приема сообщений с сервера клиенту. Прямо сейчас вы можете отправлять сообщения только от клиента на сервер.

+0

Спасибо и да, конечно, о получении сообщений назад, просто доказательство концепции, по крайней мере, я могу общаться с сервером. – jgr208

+0

Я пытаюсь выполнить эту работу, у меня есть конечная точка сервера, но я всегда получаю ошибку. Не удалось найти класс реализации. для ContainerProvider, у меня есть javax websocket jar в моем пути сборки –

+0

Может быть, задайте новый вопрос? –

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