Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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 在服务器套接字InputStream上调用available()时接收ClassCastException_Codenameone - Fatal编程技术网

Codenameone 在服务器套接字InputStream上调用available()时接收ClassCastException

Codenameone 在服务器套接字InputStream上调用available()时接收ClassCastException,codenameone,Codenameone,我正在创建一个服务器套接字,但是只要它点击intpending=is.available()(上一个链接的第88行)我收到以下异常 [Connection 5432] 0:0:8,306 - Exception: java.lang.ClassCastException - java.net.Socket cannot be cast to com.codename1.impl.android.AndroidImplementation$SocketImpl java.lang.ClassCas

我正在创建一个服务器套接字,但是只要它点击
intpending=is.available()(上一个链接的第88行)我收到以下异常

[Connection 5432] 0:0:8,306 - Exception: java.lang.ClassCastException - java.net.Socket cannot be cast to com.codename1.impl.android.AndroidImplementation$SocketImpl
java.lang.ClassCastException: java.net.Socket cannot be cast to com.codename1.impl.android.AndroidImplementation$SocketImpl
    at com.codename1.impl.android.AndroidImplementation.getSocketAvailableInput(AndroidImplementation.java:7420)
    at com.codename1.io.Socket$SocketInputStream.available(Socket.java:168)
    at com.adilam.aw2mob.SocketListener$SocketDataWorker.connectionEstablished(Unknown Source)
    at com.codename1.io.Socket$1Listener$1.run(Socket.java:105)
    at com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60)
    at java.lang.Thread.run(Thread.java:856)
[Listening on 5432] 0:0:8,323 - Exception: java.lang.NullPointerException - null
java.lang.NullPointerException
    at com.codename1.impl.android.AndroidImplementation.getSocketErrorCode(AndroidImplementation.java:7415)
    at com.codename1.io.Socket$1Listener.run(Socket.java:110)
    at com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60)
    at java.lang.Thread.run(Thread.java:856)
CN1版本是3.7
目前使用的安卓版本是4.0


非常感谢您的任何想法。

服务器套接字代码中似乎有一个bug,我们将在下一次更新中修复它


请注意,您所做的是使用一个监听套接字,它本质上不太可移植,只能在JavaSE和Android上工作。如果您使用套接字,我们建议客户端套接字使用
connect
而不是
listen

实现可移植性。我使用本机接口实现解决了这个问题

提供了在CN1中调用本机接口的非常简洁的概述。我创建了一个NativeSocketListener接口

public interface NativeSocketListener extends NativeInterface {
    public void SocketListener(int port);
}
android的NativeSocketListenerImpl

public class NativeSocketListenerImpl {
    public void SocketListener(int port) {
        new Thread(new SocketListener2(port)).start();
    }

    public boolean isSupported() {
        return true;
    }

    class SocketListener2 implements Runnable {
        private ServerSocket serverSocket;

        public SocketListener2(int port) {
            try {
                serverSocket = new ServerSocket(port);
            } catch (IOException e) {
                Log.e(e);
            }
        }

        public void run() {

            while (true) {
                try {
                    java.net.Socket socket = serverSocket.accept();
                    InputStream is = socket.getInputStream();
                    byte[] buffer = new byte[1024];
                    while (true) {
                        int pending = is.available();
                        if (pending > 0) {
                            int size = is.read(buffer, 0, 1024);
                            if (size == -1) {
                                return;
                            }
                            if (size > 0) {
                                String data = new String(buffer, 0, size).trim();
                                // do something with the data
                            }
                        } else {
                            Thread.sleep(50);
                        }
                    }
                } catch (Exception e) {
                    Log.e(e);
                }
            }
        }
    }
}
显然,这个实现不处理多个连接,但是有很多在线教程可以实现


如上所述,这是特定于Android的,所以我不能保证它在其他设备上运行得有多好。希望即将发布的版本不需要使用本机接口

谢谢谢。这是一款仅限android的专业应用程序;不是为大众设计的,所以我们真的需要倾听。期待在下一版本中修复bug。(尝试添加+1,但不到15次就无法完成)没问题,您可以接受答案,并在旁边添加复选框,因为您提交了问题,这将给您一些分数。新的更新将在本周五发布