2015-10-26 15 views
6

Come chiudere una connessione Web tramite l'API Java WebSocket? Ho usato Java websocket API per entrambi gli endpoint client e server. L'applicazione funziona correttamente. Ma non so come chiudere il websocket, prima che il thread principale termini.Chiudi connessione web socket con Java

Questo è il mio 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(); 
     } 
    } 
} 

e io uso il seguente codice per avviare il 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: Non ho usato JavaScript.

risposta

5

connectToServer metodo restituisce s' The WebSocketContainer websocket Session oggetto che ha twoclose metodi. Questo dovrebbe fare il trucco.

+0

Lo proverò. Posso anche usare l'oggetto 'Session' che è passato come parametro al metodo' onOpen' di '@ ClientEndpoint' per chiudere una connessione? – UnahD

+0

@dazoh ovviamente –

+0

Grazie mille amico! – UnahD