2015-10-26 21 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(); 
     } 
    } 
} 

であると私はPS 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(); 
     } 
    } 
} 

を開始するには、次のコードを使用します。私はJavaScriptを使用していません。

WebSocketContainer

答えて

5

connectToServer方法戻り、twocloseメソッドを有するSessionオブジェクトのWebSocket。それはトリックを行う必要があります。

+0

私はそれを試してみます。 '@ ClientEndpoint'の' onOpen'メソッドにパラメータとして渡された 'Session'オブジェクトを使って接続を閉じることもできますか? – UnahD

+0

@ダゾーもちろんもちろん –

+0

ありがとうたくさんの男! – UnahD

関連する問題