Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Codenameone 无法关闭代号为1的WebSocket连接?_Codenameone - Fatal编程技术网

Codenameone 无法关闭代号为1的WebSocket连接?

Codenameone 无法关闭代号为1的WebSocket连接?,codenameone,Codenameone,提供了有助于保持连接活动的方法autoReconnect(int-time)。。。但缺点是我无法关闭连接。我的代码中是否有我可以修复的错误,或者是库中的错误 在服务器端,有一个计时器,它每秒向id为“1234”的客户端发送一条WebSocket文本消息。这只是一个测试,我主要是从代码名为One Academy的服务器上复制的代码,所以我认为它是正确的 在客户端,我编写了以下测试用例: String uniqueId = "1234"; Form hi = new

提供了有助于保持连接活动的方法
autoReconnect(int-time)
。。。但缺点是我无法关闭连接。我的代码中是否有我可以修复的错误,或者是库中的错误

在服务器端,有一个计时器,它每秒向id为“1234”的客户端发送一条WebSocket文本消息。这只是一个测试,我主要是从代码名为One Academy的服务器上复制的代码,所以我认为它是正确的

在客户端,我编写了以下测试用例:

        String uniqueId = "1234";
        Form hi = new Form("WebSocket Test", BoxLayout.y());
        hi.show();

        final WebSocket sock = new WebSocket("ws://localhost:8080/wsMsg") {
            @Override
            protected void onOpen() {
                Log.p("WebSocket onOpen - Sending uniqueId: " + uniqueId);
                hi.add("WebSocket onOpen - Sending uniqueId: " + uniqueId);
                hi.animateLayout(400);
                send(uniqueId);
            }

            @Override
            protected void onClose(int statusCode, String reason) {
                Log.p("WebSocket onClose");
                hi.add("WebSocket onClose");
                hi.animateLayout(400);
            }

            @Override
            protected void onMessage(String message) {
                Log.p("WebSocket onMessage: " + message);
                hi.add(new SpanLabel("WebSocket onMessage: " + message));
                hi.animateLayout(400);
            }

            @Override
            protected void onMessage(byte[] message) {
                Log.p("WebSocket onMessage (byte[]): " + message.toString());
            }

            @Override
            protected void onError(Exception ex) {
                Log.e(ex);
                hi.add(new SpanLabel("WebSocket onError:\n" + ex.getMessage()));
            }
        };
        sock.connect();
        sock.autoReconnect(5000);

        UITimer.timer(5000, false, hi, () -> {
            sock.close();
        });
输出为:


如您所见,关闭WebSocket连接后,
autoReconnect
将其重新打开。预期的行为是,
autoReconnect
必须仅在出现网络错误时重新连接,而不是在显式调用
close
时重新连接。

写完这个问题后,我在真实设备(Android和iOS)上测试了相同的代码,得到了它们之间的不同行为。这让我确信这是库中的一个bug,所以我提出了这个问题:这是有道理的,史蒂夫整个星期都在忙着跟踪一个内存崩溃(最终解决了),所以希望他能在周末恢复到足够的状态来看看这个问题。如果你不确定在写了这个问题之后,我在真实设备(Android和iOS)上测试了相同的代码,我得到了它们之间不同的行为。这让我确信这是库中的一个bug,所以我提出了这个问题:这是有道理的,史蒂夫整个星期都在忙着跟踪一个内存崩溃(最终解决了),所以希望他能在周末恢复到足够的状态来看看这个问题。如果你不确定,请告诉我们