0

I have 2 buttons btn_openport and btn_closeport with below code: btn_openport opens the socket and allows for new connection : is working fine btn_closeport calls the below method in background in asynctask:

private static class closePort extends AsyncTask {
@Override
protected Object doInBackground(Object[] objects) {
    Boolean closestatus = new OpenClosePort(port).closePort();

            ......rest of code
}

class openclose {
    private Socket socket = null;
    private ServerSocket server = null;

    private static final String TAG = "ports";

    private int port;

    void openPort() {
        try {
            server = new ServerSocket(port);
            socket = server.accept();
        } catch () {
        }
        ..........
    }

    Boolean closePort() {
        Log.e(TAG + "/closePort", ">>> Closing Port : " + this.port);
        try {
            socket.close();

            return true;

        } catch (Exception e) {
            Log.e(TAG + "/closePort", "Error closing port: ", e);
            return false;
        }
    }
}

However, when this code for closing port is executed, I am getting NullPointerException, although the client is connected on the socket.

How can I fix this?

Error::

11-05 12:06:35.938 533-533/com.app.fi E/MyActivity/closePort: >>> Closing Port : 5556
11-05 12:06:35.941 533-533/com.app.fi E/MyActivity/closePort: Error closing port: 
   11-05 14:18:55.102 7460-8810/com.app.fi E/MyActivity/closePort: >>> Closing Port : 5556
11-05 14:18:55.104 7460-8810/com.app.fi E/MyActivity/closePort: Error closing port: 
    java.lang.NullPointerException: Attempt to invoke virtual method 'void java.net.Socket.close()' on a null object reference
        at com.app.fi.OpenClosePort.closePort(OpenClosePort.java:54)
        at com.app.fi.MainActivity$closePort.doInBackground(MainActivity.java:83)
        at android.os.AsyncTask$2.call(AsyncTask.java:333)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:764)
11-05 14:18:55.109 7460-8810/com.app.fi W/checkPortStatus: Printing Socket value : Socket[address=localhost/127.0.0.1,port=5556,localPort=45524]
Umer Farooq
  • 762
  • 1
  • 8
  • 17
cool_stuff_coming
  • 443
  • 1
  • 6
  • 19

1 Answers1

0

why do you create a new object for closing the port? in this line

new OpenClosePort(port).closePort();

try creating an object of the OpenClosePort class and use the same object when closing the port.

Omid Ziyaee
  • 420
  • 4
  • 16