2016-05-06 2 views
0

Ich bin neu in Java. und ich mache Leistungstests auf einem Websockt-Server. Ich muss über Java einen Websocket erstellen, um mit dem Server zu kommunizieren. Ich habe javax.websocket verwendet, aber es ist immer fehlgeschlagen. Code wie folgt:verwendet Java, um eine Websocket-Verbindung fehlgeschlagen

WebSocketContainer container = ContainerProvider.getWebSocketContainer(); 
    String uri ="ws://127.0.0.1:8080"; 
    System.out.println("Connecting to"+ uri); 
    try { 
    session = container.connectToServer(MyClient.class, URI.create(uri)); 
     } catch (DeploymentException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 

verwendet i dies die Verbindung zu machen, und es schickte etwas, aber nicht meinen Punkt treffen.

Ich bekomme nur das folgende Netzwerkpaket.

enter image description here

und wenn ich js Code verwenden, wie unten, und es machen ..

var target='ws://localhost:7777'; 
var socket = io.connect(target); 

enter image description here

+0

ist es möglich ... –

+0

Sorry für den vorherigen Post, den ich gemacht habe. Es war für die Serverimplementierung. Jetzt habe ich meinen Beitrag für die Client-Implementierung geändert. – afzalex

+0

Ich glaube, ich habe das Problem auch falsch verstanden. Wenn Sie die HTTP-Anforderung nicht ausführen, liegt das Problem nicht in einer fehlenden Abhängigkeit von der Clientendpunktseite. Aber wo ist das Problem? Erhalten Sie eine Fehlermeldung? Dann brauchen wir den Stack-Trace. Oder funktioniert etwas anderes nicht wie beabsichtigt? Und am wichtigsten: Blockiert Ihre Firewall irgendetwas? Nur um sicherzustellen, dass ein Test damit komplett deaktiviert wird. – Leviathan

Antwort

0

getWebSocketContainer() So rufen Sie mindestens ein Container Provider-Klasse haben müssen, aufgelistet in der Datei META-INF/services/javax.websocket.ContainerProvider.

Zum Beispiel können Sie org.glassfish.tyrus.container.grizzly.client.GrizzlyContainerProvider oder org.glassfish.tyrus.client.ClientManager verwenden. Stellen Sie sicher, dass diese Klassen für Ihr Projekt verfügbar sind.

Siehe Dokumentation für mehr: https://docs.oracle.com/javaee/7/api/javax/websocket/ContainerProvider.html

+0

Ich habe das versucht, aber es ist auch gescheitert. –

0

Client-Endpunkt So erstellen Sie einen Client-Server benötigen. Hier habe ich ein Beispiel mit Maven gezeigt.

Fügen Sie die folgenden Abhängigkeiten in Maven

<dependency> 
    <groupId>org.glassfish.tyrus</groupId> 
    <artifactId>tyrus-server</artifactId> 
    <version>1.2.1</version> 
</dependency> 

<dependency> 
    <groupId>org.glassfish.tyrus</groupId> 
    <artifactId>tyrus-client</artifactId> 
    <version>1.2.1</version> 
</dependency> 

<dependency> 
    <groupId>org.glassfish.tyrus</groupId> 
    <artifactId>tyrus-container-grizzly</artifactId> 
    <version>1.2.1</version> 
</dependency> 

Dann schreiben Sie folgenden Code

import java.net.URI; 

import javax.websocket.ClientEndpoint; 
import javax.websocket.ContainerProvider; 
import javax.websocket.OnMessage; 
import javax.websocket.Session; 
import javax.websocket.WebSocketContainer; 

@ClientEndpoint 
public class WSClient { 
    private static Object waitLock = new Object(); 

    @OnMessage 
    public void onMessage(String message) { 
     System.out.println("Received msg: " + message); 
    } 

    private static void wait4TerminateSignal() { 
     synchronized (waitLock) { 
      try { 
       waitLock.wait(); 
      } catch (InterruptedException e) { 
      } 
     } 
    } 
    public static void main(String[] args) { 
     WebSocketContainer container = null;// 
     Session session = null; 
     try { 
      String url = "ws://localhost:8080/abcd/ratesrv"; //< Here goes your URL 
      container = ContainerProvider.getWebSocketContainer(); 
      session = container.connectToServer(WSClient.class, URI.create(url)); 
      wait4TerminateSignal(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (session != null) { 
       try { 
        session.close(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

Wenn Sie nicht Maven verwenden, fügen Sie einfach alle JAR-Dateien von Tyrus auf Ihrem Weg.

+0

Ich habe das verwendet, aber kann keine gültige Verbindung herstellen –

+0

Können Sie eine Verbindung mit Javascript herstellen? Welche IDE verwenden Sie? – afzalex

+0

eclipse Ja, mit js .. –