Announcement

Collapse
No announcement yet.

Java JSR 356 Server und Client erben von Endpoint

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Java JSR 356 Server und Client erben von Endpoint

    Hallo liebe Leute,

    ich bin Anfänger in der Websocket-Technologie und komme bei meinem Echo-WebSocket-Programm nicht weiter.
    Client und Server erben von Endpoint.

    Mein Problem:
    Client und Server bauen eine Verbindung auf. Im Client wird die Methode onOpen aufgerufen, aber im Server geschieht nichts. Er meldet überhaupt nichts. Auch gibt es keine Fehlermeldungen.
    Mir ist klar, dass ich das über Annotationen machen kann z.B. @OnOpen, @OnMessage usw. aber möchte es speziell ohne Annotationen haben.
    Soviel ich verstanden habe muss es auch ohne klappen, indem man von Endpoint erbt und die Methoden überschreibt.

    hier noch mein Code:

    HelloServer.java:

    @ServerEndpoint(value="/echo")
    public class HelloServer extends Endpoint{

    //@OnOpen <<<<<<<<<<<<<<<<<< Wenn OnOpen Annotation verwendet wird klappt das mit dem Echo Programm und alles läuft wie gewollt
    @Override
    public void onOpen(final Session session, EndpointConfig config) {
    System.out.println("in onOpen:::Server");
    session.addMessageHandler(new MessageHandler.Whole<String>() {
    @Override
    public void onMessage(String message) {
    try {
    session.getBasicRemote().sendText(message);
    } catch (IOException ex) {
    Logger.getLogger(HelloServer.class.getName()).log( Level.SEVERE, null, ex);
    }
    }
    });

    }

    @Override
    public void onClose(Session session, CloseReason closeReason) {
    System.out.println("Session: " +session.getId() + "CloseReason = " + closeReason);
    }

    @Override
    public void onError (Session session, Throwable throwable) {
    throwable.printStackTrace();
    }
    }

    ServerMain.java

    public class ServerMain {

    public static void main(String[] args) {
    Server server = new Server("localhost", 1790, "/shop", HelloServer.class);
    try {
    server.start();
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Please press a key to stop the server.");
    reader.readLine();

    } catch (Exception e) {
    throw new RuntimeException(e);
    } finally {
    server.stop();
    }
    }
    }

    HelloClient.java

    @ClientEndpoint
    public class HelloClient extends Endpoint{
    private Logger logger = Logger.getLogger(this.getClass().getName());
    private Session session = null;

    public HelloClient(URI endpointURI){
    try {
    WebSocketContainer container = ContainerProvider.getWebSocketContainer();
    container.connectToServer(this, endpointURI);
    } catch (DeploymentException ex) {
    Logger.getLogger(HelloClient.class.getName()).log( Level.SEVERE, null, ex);
    } catch (IOException ex) {
    Logger.getLogger(HelloClient.class.getName()).log( Level.SEVERE, null, ex);
    }
    }

    @Override
    public void onOpen(Session session, EndpointConfig config) {
    this.setSession(session);
    logger.info("Connected ... " + session.getId());
    session.addMessageHandler(new MessageHandler.Whole<String>() {

    @Override
    public void onMessage(String message) {
    System.out.println("Server said: "+message);
    }
    });
    }

    @Override
    public void onClose(Session session, CloseReason closeReason) {
    logger.info("Closing...." + closeReason);
    System.out.println("Session: " +session.getId() + "CloseReason = " + closeReason);
    }

    @Override
    public void onError (Session session, Throwable throwable) {
    logger.info("Error " + throwable);
    throwable.printStackTrace();
    }

    //get Session
    public Session getSession() {
    return session;
    }

    //set Session
    public void setSession(Session session) {
    this.session = session;
    }

    }

    und ClientMain.java


    public class ClientMain {

    public static void main(String[] args) throws IOException, URISyntaxException, InterruptedException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    CountDownLatch latch = new CountDownLatch(1);
    HelloClient hce = new HelloClient(new URI("ws://localhost:1790/shop/echo"));

    System.out.println("nachricht?");
    while (hce.getSession().isOpen()) {
    String msg = reader.readLine();
    hce.getSession().getBasicRemote().sendText(msg);
    }

    latch.await();

    }
    }

    Großes Danke für hilfreiche Antworten
Working...
X