2015-10-26 85 views
6

如何使用Java WebSocket API关闭websocket连接?我已经将Java websocket API用于服务器和客户端端点。该应用程序工作正常。但在主线程结束之前,我不知道如何关闭websocket。关闭与Java的websocket连接

这是我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

WebSocketContainerconnectToServer方法返回的WebSocket具有twoclose方法Session对象。这应该够了吧。

+0

我会试试看。我是否也可以使用作为参数传递给'@ ClientEndpoint'的'onOpen'方法的'Session'对象关闭连接? – UnahD

+0

@dazoh当然 –

+0

非常感谢的人! – UnahD