nullpointererror +无法绑定套接字

时间:2016-06-04 12:17:35

标签: android multithreading sockets

这适用于我的应用程序的早期版本,它基本上是完全相同的代码。唯一的区别是当前应用程序使用更高的构建工具和sdk编译版本,会导致代码出错吗?此外,该应用程序现在扩展了FragmentActivity而不是Activity。

其中一个错误是空指针异常,它来自logcat是由于ServerSocket(ss)为空。

另一个错误是libcore.io.ErrnoException:绑定失败:代码段中第8行的EADDRINUSE(地址已在使用中)

我尝试过实现ss.setReuseAddress(true),但由于未解决的符号问题,它无法正常工作?

任何想法或指示都将不胜感激!

class CommsThread implements Runnable {
    private volatile boolean stopFlag = false;
    private ServerSocket ss ;
    private static final int SERVERPORT = 6000;
    public void run() {
        Socket s = null;
        try {
            ss = new ServerSocket(SERVERPORT); <-- bind error here
        } catch (IOException e) {
            e.printStackTrace();
            Log.e(TAG,"IO Error here"); <--- this is printed in log
      }

        try {
            s = ss.accept(); <----- nullpointer exception here
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        myHandler.sendEmptyMessage(0);

        while(stopFlag == false){
            try {
                out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream())), true);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                out.printf(String.valueOf(d.format(accel[0]))+"\t"+String.valueOf(d.format(accel[1]))+"\t"+String.valueOf(d.format(accel[2])) + "\tAccelerometer" + "\n");
                out.printf(String.valueOf(d.format(gyro[0]))+"\t"+String.valueOf(d.format(gyro[1]))+"\t"+String.valueOf(d.format(gyro[2]))+ "\tGyroscope" + "\n");
                out.printf(String.valueOf(d.format(magnet[0]))+"\t"+String.valueOf(d.format(magnet[1]))+"\t"+String.valueOf(d.format(magnet[2]))+"\tMagnetometer"+ "\n\n");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            if( s==null)
            {
                stopComms();
            }
            */
        }
    }

1 个答案:

答案 0 :(得分:0)

NPE只是你自己的错误代码结构。真正的问题是绑定异常,这意味着其他东西正在侦听端口6000,可能是同一应用程序的先前实例。修复此问题,或使用其他端口。