клиент, работающий на android, закрывает и выходит из приложения без исключения или любого сообщения в функции «connect (socket)», если сервер недоступен - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу подключить клиентский TCP с телефона android8 / 9/10 к серверному приложению P C windows 10. Если сервер работает, все работает нормально, но клиент, работающий на android, закрывает и выходит из приложения без исключения или любого сообщения в функции «connect (socket)», если сервер недоступен. Это происходит в C ++ (android NDK) и Java. Я использую Android studio 3.5.3. Части кода на C ++ и java:

    …
    try {
       int ressc = connect(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
       if(ressc==0){
            …
       }
    }
    catch(...){
       std::exception_ptr p = std::current_exception();
    }
    ….

    /////Java

    …..
    try {
        InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
        socket = new Socket(serverAddr, SERVERPORT);
    } catch (SocketException e1) {
        e1.printStackTrace();
    } catch (Exception e1) {
        e1.printStackTrace();
    }
    …

Я пытаюсь уловить случай, когда сервер недоступен. Пожалуйста, помогите мне в решении проблемы.

Logcat is:
020-02-06 16:02:11.909 18810-18810/com.gstoilov.opencv_ndk V/OpenCV-NDK-Java: surfaceChanged format=4, width=1080, height=1080
2020-02-06 16:02:25.827 18810-18810/com.gstoilov.opencv_ndk I/Choreographer: Skipped 1052 frames!  The application may be doing too much work on its main thread.
2020-02-06 16:02:25.907 18810-18915/com.gstoilov.opencv_ndk I/OpenGLRenderer: Davey! duration=17620ms; Flags=1, IntendedVsync=817735142460428, Vsync=817752675793060, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=817752683403284, AnimationStart=817752683557816, PerformTraversalsStart=817752685522712, DrawStart=817752699312503, SyncQueued=817752735797243, SyncStart=817752735903232, IssueDrawCommandsStart=817752736699222, SwapBuffers=817752761843180, FrameCompleted=817752763080993, DequeueBufferDuration=5291000, QueueBufferDuration=202000, 
2020-02-06 16:02:25.926 18810-18810/com.gstoilov.opencv_ndk D/AndroidRuntime: Shutting down VM
2020-02-06 16:02:25.931 18810-18810/com.gstoilov.opencv_ndk E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.gstoilov.opencv_ndk, PID: 18810
    java.lang.IllegalArgumentException: width and height must be > 0
        at android.graphics.Bitmap.createBitmap(Bitmap.java:1042)
        at android.graphics.Bitmap.createBitmap(Bitmap.java:1009)
        at android.graphics.Bitmap.createBitmap(Bitmap.java:959)
        at android.graphics.Bitmap.createBitmap(Bitmap.java:920)
        at com.gstoilov.opencv_ndk.MainActivity.JavaBitmapFromNativeMat(MainActivity.java:615)
        at com.gstoilov.opencv_ndk.MainActivity$3$1.run(MainActivity.java:366)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:280)
        at android.app.ActivityThread.main(ActivityThread.java:6706)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
2020-02-06 16:02:25.942 18810-18810/com.gstoilov.opencv_ndk I/Process: Sending signal. PID: 18810 SIG: 9

1 Ответ

0 голосов
/ 06 февраля 2020

Спасибо за идею и урок. После проверки logcat я понял, что основной поток пытался отобразить растровое изображение, но сокет блокировал на 30 секунд (по умолчанию таймаут) текущий поток и не смог создать это растровое изображение. Основной поток закрывал виртуальную машину, и в текущем потоке не было исключений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...