2015-11-07 2 views
1

Я написал сервер Blackjack в java, который запускается нормально, но у меня возникли проблемы с написанием отдельного java-клиента для подключения к моему серверу. Я следил за документацией и примерами Spring Websocket, и похоже, что мой клиент подключается без каких-либо ошибок, и я ожидаю, что он ударит по методу afterConnected(), но он не дойдет до этого. Клиент работает и заканчивается без ошибок. Любая идея, что я делаю неправильно?Не удается подключить клиента к серверу с помощью Spring Websocket

WebSocketConfig.java на стороне сервера:

package com.lactaoen.blackjack.config; 

import org.springframework.context.annotation.Configuration; 
import org.springframework.messaging.simp.config.MessageBrokerRegistry; 
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; 
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; 
import org.springframework.web.socket.config.annotation.StompEndpointRegistry; 

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 

    @Override 
    public void configureMessageBroker(MessageBrokerRegistry registry) { 
     registry.enableSimpleBroker("/topic", "/queue"); 
     registry.setApplicationDestinationPrefixes("/app"); 
     registry.setUserDestinationPrefix("/user"); 
    } 

    @Override 
    public void registerStompEndpoints(StompEndpointRegistry registry) { 
     registry.addEndpoint("/connect").withSockJS(); 
    } 
} 

Клиент сторона:

package com.lactaoen.blackjack.client; 

import org.springframework.messaging.converter.StringMessageConverter; 
import org.springframework.messaging.simp.stomp.*; 
import org.springframework.web.socket.client.standard.StandardWebSocketClient; 
import org.springframework.web.socket.messaging.WebSocketStompClient; 
import org.springframework.web.socket.sockjs.client.RestTemplateXhrTransport; 
import org.springframework.web.socket.sockjs.client.SockJsClient; 
import org.springframework.web.socket.sockjs.client.Transport; 
import org.springframework.web.socket.sockjs.client.WebSocketTransport; 

import java.util.ArrayList; 
import java.util.List; 

public class BlackjackClient { 

    public static void main(String[] args) { 

     List<Transport> transports = new ArrayList<>(); 
     transports.add(new WebSocketTransport(new StandardWebSocketClient())); 
     transports.add(new RestTemplateXhrTransport()); 

     SockJsClient sockJsClient = new SockJsClient(transports); 

     String stompUrl = "ws://localhost:8080/connect"; 
     WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient); 
     stompClient.setMessageConverter(new StringMessageConverter()); 

     stompClient.connect(stompUrl, new BlackjackSessionHandler()); 
    } 

    private static class BlackjackSessionHandler extends StompSessionHandlerAdapter { 
     @Override 
     public void afterConnected(StompSession session, StompHeaders connectedHeaders) { 
      // I'd expect it to print this out, but it doesn't get here 
      System.out.println("Hello, world!"); 
     } 
    } 
} 

ответ

1

основной метод клиентской части отделки перед подсоединением.

положить Thread.sleep(60000) в последней строке основного метода, он должен работать

0

клиент закрывает соединение после передачи полного (отправка или получение), вы должны блокировать поток, чтобы обеспечить применение не Закрыть.
Добавить это в конце основного метода:

//block the thread 
CountDownLatch latch = new CountDownLatch(1); 
try { 
    latch.await(); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 
Смежные вопросы