简体   繁体   中英

Keep getting annoying warning “bind failed: EADDRINUSE (Address already in use)”

I'm connecting a mobile with a java aplication but I keep getting this warning:

01-05 13:19:30.759: W/System.err(3371): java.net.BindException: bind failed: EADDRINUSE (Address already in use)

01-05 13:19:30.759: W/System.err(3371): at libcore.io.IoBridge.bind(IoBridge.java:89)

01-05 13:19:30.759: W/System.err(3371): at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:150)

01-05 13:19:30.759: W/System.err(3371): at java.net.ServerSocket.bind(ServerSocket.java:318)

01-05 13:19:30.759: W/System.err(3371): at java.net.ServerSocket.bind(ServerSocket.java:281)

01-05 13:19:30.759: W/System.err(3371): at com.example.informativoapp.ConnectThread.run(ConnectThread.java:32)

01-05 13:19:30.759: W/System.err(3371): Caused by: libcore.io.ErrnoException: bind failed: EADDRINUSE (Address already in use)

01-05 13:19:30.759: W/System.err(3371): at libcore.io.Posix.bind(Native Method)

01-05 13:19:30.759: W/System.err(3371): at libcore.io.ForwardingOs.bind(ForwardingOs.java:39)

01-05 13:19:30.759: W/System.err(3371): at libcore.io.IoBridge.bind(IoBridge.java:87)

01-05 13:19:30.759: W/System.err(3371): ... 4 more

I'm using this code :

Mobile code :

private ConnectedThread con;
private ConnectThread connect;

...

protected void onCreate(Bundle savedInstanceState) {
...
 connect = new ConnectThread(mHandler);

         connect.start();
}

 public void onBackPressed() {
            if(connect != null)
                connect.interrupt();
            if(con != null)
                con.interrupt();

            finish();
        }


public class ConnectThread extends Thread {

    Handler mHandler;
    private ConnectedThread con;

    public ConnectThread(Handler mHandler)
    {

        this.mHandler = mHandler;

    }

    @Override
    public void run() 
    {
        while(true){
            Socket socket=null;
            try {
                ServerSocket serverSocket = new ServerSocket();
                serverSocket.setReuseAddress(true); 
                serverSocket.bind(new InetSocketAddress(4200));
                socket = serverSocket.accept();

                Log.i("conex", "Conectou");

                mHandler.obtainMessage(3,socket).sendToTarget();


            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

}

handler execute it :

                    con = new ConnectedThread((Socket)msg.obj, mHandler);                       
                    con.start();

EDITED (thanks Titus)

Probably, Your code creates socket every time. Please try this.

    Socket socket=null;
    try {
        ServerSocket serverSocket = new ServerSocket();
        serverSocket.setReuseAddress(true);
        serverSocket.bind(new InetSocketAddress(4200));
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    while(true){
        try {
            Log.i("conex", "Conectou");

            socket = serverSocket.accept();
            mHandler.obtainMessage(3,socket).sendToTarget();


        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM