Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t使用SpringWebSocket将客户端连接到服务器_Java_Stomp_Spring Websocket - Fatal编程技术网

Java Can';t使用SpringWebSocket将客户端连接到服务器

Java Can';t使用SpringWebSocket将客户端连接到服务器,java,stomp,spring-websocket,Java,Stomp,Spring Websocket,我已经用java编写了一个Blackjack服务器,它可以正常启动,但是我在编写一个单独的java客户端来连接到我的服务器时遇到了问题。我遵循了SpringWebSocket文档和示例,它看起来像是我的客户机连接没有任何错误,我希望它能够达到afterConnected()方法,但它没有达到这一点。客户端运行并完成,没有错误。知道我做错了什么吗 服务器端的WebSocketConfig.java: package com.lactaoen.blackjack.config; import or

我已经用java编写了一个Blackjack服务器,它可以正常启动,但是我在编写一个单独的java客户端来连接到我的服务器时遇到了问题。我遵循了SpringWebSocket文档和示例,它看起来像是我的客户机连接没有任何错误,我希望它能够达到
afterConnected()
方法,但它没有达到这一点。客户端运行并完成,没有错误。知道我做错了什么吗

服务器端的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!");
        }
    }
}
客户端:

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!");
        }
    }
}
package com.lactaoen.blackjack.client;
导入org.springframework.messaging.converter.StringMessageConverter;
导入org.springframework.messaging.simp.stomp.*;
导入org.springframework.web.socket.client.standard.StandardWebSocketClient;
导入org.springframework.web.socket.messaging.WebSocketStompClient;
导入org.springframework.web.socket.sockjs.client.restemplatexhrtransport;
导入org.springframework.web.socket.sockjs.client.SockJsClient;
导入org.springframework.web.socket.sockjs.client.Transport;
导入org.springframework.web.socket.sockjs.client.WebSocketTransport;
导入java.util.ArrayList;
导入java.util.List;
公共类黑jackclient{
公共静态void main(字符串[]args){
List transports=new ArrayList();
添加(新WebSocketTransport(新标准WebSocketClient());
添加(新的RestTemplateXhrTransport());
SockJsClient SockJsClient=新的SockJsClient(传输);
String stompUrl=“ws://localhost:8080/connect”;
WebSocketStompClient stompClient=新的WebSocketStompClient(sockJsClient);
setMessageConverter(新的StringMessageConverter());
connect(stompUrl,newblackjacksessionhandler());
}
私有静态类BlackjackSessionHandler扩展了StompSessionHandlerAdapter{
@凌驾
连接后公用无效(StompSession会话,StompHeaders connectedHeaders){
//我希望它能把这些打印出来,但它没到这里
System.out.println(“你好,世界!”);
}
}
}

客户端的主要方法是在连接之前完成


放置一个
线程。sleep(60000)
在主方法的最后一行,它应该可以工作客户端将在通信完成(发送或接收)后关闭连接,您应该阻止线程以确保应用程序不会关闭。
在主方法末尾添加以下内容:

//block the thread
CountDownLatch latch = new CountDownLatch(1);
try {
    latch.await();
} catch (InterruptedException e) {
    e.printStackTrace();
}