java - 使用套接字从服务器获取实时数据

标签 java android sockets serversocket

我正在尝试获取来自 URL ws://xxx.xxx.xx.12/Geteventcntr/getUserMatchLst/4/696

的服务器的实时数据

我不知道如何将其连接到服务器并从respose获取数据

public class OddsActivity extends AppCompatActivity {

    private OkHttpClient client;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_odds);
        client = new OkHttpClient();
        Request request = new Request.Builder().url("ws://xx.xx.xx.xx/Geteventcntr/getUserMatchLst/4/696").build();
        EchoWebSocketListener listener = new EchoWebSocketListener();
        WebSocket ws = client.newWebSocket(request, listener);
        client.dispatcher().executorService().shutdown();

    }

    private final class EchoWebSocketListener extends WebSocketListener {
        private static final int NORMAL_CLOSURE_STATUS = 1000;
        @Override
        public void onOpen(WebSocket webSocket, Response response) {

        }
        @Override
        public void onMessage(WebSocket webSocket, String text) {
            output("Receiving : " + text);
        }
        @Override
        public void onMessage(WebSocket webSocket, ByteString bytes) {
            output("Receiving bytes : " + bytes.hex());

        }
        @Override
        public void onClosing(WebSocket webSocket, int code, String reason) {
            webSocket.close(NORMAL_CLOSURE_STATUS, null);
            output("Closing : " + code + " / " + reason);

        }
        @Override
        public void onFailure(WebSocket webSocket, Throwable t, Response response) {
            output("Error : " + t.getMessage());
        }
    }

    private void output(String s) {
        Log.d("WebSocket", "output: "+s);
    }
}

最佳答案

首先将此行添加到您的 gradle

implementation 'com.neovisionaries:nv-websocket-client:2.4'

实现后,您必须创建一个类WebsocketClient来连接并从服务器获取实时数据。

    public class WebsocketClient {

    public static String url = "ws://XXX.XXX.XXX/XXX";
    private static WebSocketClient mWebSocketClient;

    public static void connect_to_server(Context con) {


        URI uri;
        try {
            uri = new URI("ws://XXX.XXX.XXX/XXX");
        } catch (URISyntaxException e) {
            e.printStackTrace();
            return;
        }

        mWebSocketClient = new WebSocketClient(uri, new Draft_17()) {
            @Override
            public void onOpen(ServerHandshake serverHandshake) {
                Log.e("Websocket", "Opened");

            }

            @Override
            public void onMessage(String s) {

                Log.e("OnMessageRecieved>>>",s.toString());

            }

            @Override
            public void onClose(int code, String s, boolean b) {
                Log.e("Websocket", code + ": Closed " + s);
            }

            @Override
            public void onError(Exception e) {
                Log.e("Websocket", "Error " + e.getMessage());
            }
        };

        if(mWebSocketClient.getConnection().isConnecting()){

        }else{
            mWebSocketClient.connect();
        }
    }

}

并从 Activity 连接到它

WebsocketClient.connect_to_server(MainAtivity.this)

关于java - 使用套接字从服务器获取实时数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56804035/

相关文章:

android - 在 Android 后台运行应用程序或方法,即使应用程序关闭

c - 两个UDP监听器中只有一个接收消息

c - 使用 C 进行客户端服务器编程速度慢

java - Android - 强制关闭、PDF 不可用、iText

java - 如何在 Eclipse 插件中使用 AspectJ

android - android中viewpager中的多个视频播放器

android - 在 kotlin 的 Elvis 运算符中使用多行

iphone - 在window和iPad之间建立Socket连接

java - 应用实例之间不兼容 : prevent rabbitmq to consume messages with particular header

Java判断一个对象是哪个类