2015-10-26 3 views
6

Как закрыть соединение с помощью Java WebSocket API? Я использовал API Java websocket для конечных точек сервера и клиента. Приложение работает нормально. Но я не знаю, как закрыть websocket, прежде чем закончится основной поток.Закрыть соединение с Java

Это мой ClientEndpoint

package websocket.client; 

import java.io.IOException; 

import javax.websocket.MessageHandler; 
import javax.websocket.OnError; 
import javax.websocket.OnMessage; 
import javax.websocket.OnOpen; 
import javax.websocket.Session; 

@ClientEndpoint 
public class EchoClient { 
    Session session; 

    //request 
    @OnOpen 
    public void onOpen(Session session, EndpointConfig config) { 
     System.out.println("Connected to endpoint: " + session.getBasicRemote()); 
     this.session = session; 
     sendMessage("Welcome to WebSocket"); 
    } 

    //response 
    @OnMessage 
    public void onMessage(String text) { 
     System.out.println("Received response in client from server: " + text); 
    } 

    @OnError 
    public void onError(Session session, Throwable t) { 
     t.printStackTrace(); 
    } 

    private void sendMessage(String message) { 
     System.out.println("Sending message from client to server: " + message); 
     System.out.println(session); 
     try { 
      session.getBasicRemote().sendText(message); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

И я использую следующий код, чтобы начать ClientEndPoint

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

import javax.websocket.ContainerProvider; 
import javax.websocket.DeploymentException; 
import javax.websocket.WebSocketContainer; 

import websocket.client.EchoClient; 

public class WebSocketDemo { 
    public static void main(String[] args) { 
     String uri = "ws://localhost:8080/websocket"; 
     System.out.println("Connecting to " + uri); 
     WebSocketContainer container = ContainerProvider.getWebSocketContainer(); 
     try { 
      container.connectToServer(EchoClient.class, URI.create(uri)); 
     } catch (DeploymentException | IOException e) { 
      e.printStackTrace(); 
     } 
     try { 
      Thread.sleep(5000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

PS: Я не использовал JavaScript.

ответ

5

WebSocketContainer «ы connectToServer метод возвращает WebSocket Session объект, который имеет twoclose методы. Это должно делать свое дело.

+0

Я попробую. Могу ли я также использовать объект 'Session', который передается как параметр в метод' onOpen' '@ ClientEndpoint', чтобы закрыть соединение? – UnahD

+0

@dazoh конечно –

+0

Спасибо большое! – UnahD

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