【问题标题】:'java.net.Socket java.net.ServerSocket.accept()' on a null object reference [duplicate]空对象引用上的“java.net.Socket java.net.ServerSocket.accept()”[重复]
【发布时间】:2017-05-06 13:16:53
【问题描述】:

服务器套接字抛出此错误并且应用程序完全崩溃。我在我的 onCreate() 方法中调用了这个线程。当活动第一次运行时它很好,但在完成并返回此活动后给出以下错误。

'java.net.Socket java.net.ServerSocket.accept()' 在空对象引用上

 private class ClientConnectionThread implements Runnable {
        ServerSocket serversocket;

        public ClientConnectionThread(){
            try{
                serversocket = new ServerSocket(5005);
                serversocket.setReceiveBufferSize(1024*1024);
                Log.v("BoardCastRunning","BoardCast Server Waiting");
            }catch (IOException ex){
                Log.v("BoardCastError",ex.toString());
            }


        }

        @Override
        public void run() {

            while(true){
                try{

                    streamClientSocket = serversocket.accept();
                    Log.v("BoardCast","New Connection");
                    videoBroadcastSockets.add(streamClientSocket);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Utils.shortToast(context,
                                    "Client connected from: "
                                            + streamClientSocket.getInetAddress().getHostAddress()
                                            + " " + streamClientSocket.getPort());


                        }
                    });
                }
                catch(IOException ex){
                    Log.v("BoardCastError",ex.toString());
                }


            }
        }
    }

【问题讨论】:

  • 您忘记了 NullPointerException 这个词。你为什么没有提到完整的消息?
  • 因为您可能会遇到 NetworkOnMainThreadException。

标签: android sockets serversocket


【解决方案1】:

我找到了错误并编辑了我的代码,现在它工作正常且完美。

  private class ClientConnectionThread implements Runnable {
        ServerSocket serversocket;

        public ClientConnectionThread(){
            try{
                serversocket = new ServerSocket(5005);
                serversocket.setReceiveBufferSize(1024*1024);
                Log.v("BoardCastRunning","BoardCast Server Waiting");
            }catch (IOException ex){
                Log.v("BoardCastError",ex.toString());
            }


        }

        @Override
        public void run() {

            while(true){
                try{
                    if(serversocket!=null){
                        if(!serversocket.isClosed()){
                            streamClientSocket = serversocket.accept();
                            Log.v("BoardCast","New Connection");
                            if(streamClientSocket!=null){
                                videoBroadcastSockets.add(streamClientSocket);
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        Utils.shortToast(context,
                                                "Client connected from: "
                                                        + streamClientSocket.getInetAddress().getHostAddress()
                                                        + " " + streamClientSocket.getPort());


                                    }
                                });
                            }

                        }
                    }


                }
                catch(IOException ex){
                    Log.v("BoardCastError",ex.toString());
                }


            }
        }
    }

【讨论】:

  • 你是怎么修好的?你必须解释。如果 serverSocket 为 null 或关闭,则您将无休止且毫无意义地循环。不好的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 2016-10-04
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
相关资源
最近更新 更多