Socket表示已关闭,但事实并非如此

时间:2015-01-10 07:49:52

标签: java android sockets

我对Socket有点问题。 所以,代码如下:

    private class SocketThread extends Thread {

    String whatistodo;

    public SocketThread(String whatistodo) {
        this.whatistodo = whatistodo;
    }

    @Override
    public void run()  {
        try {

            Socket socket = new Socket(IP (is set), port (is set));  //  Eröffne Socket

            if(whatistodo.equals("read")) {

                Boolean isDone = false;
                InputStream is = socket.getInputStream();                
                InputStreamReader isr = new InputStreamReader(is);       

                BufferedReader br = new BufferedReader(isr);             // In Buffer

                String msg;                                          


                while (!isDone && ((br.readLine()) != null)) {    

                    // stuff
                   System.out.println(msg);

                }

            }

            if(whatistodo.equals("close")) {

                socket.close();

                if(socket.isClosed()) {

                    finish();

                }
            }

            Log.d("Socket", String.valueOf(socket.isClosed()));



        } catch (IOException e1) {


        /*  Log.e("IOException", String.valueOf(e1));



            Looper.prepare();

            new AlertDialog.Builder(Bedienung.this)
                    .setTitle("Socketfehler")
                    .setMessage("Verbindung mit TCP fehlgeschlagen / verloren.")
                    .setPositiveButton("Ok", null)
                    .setIcon(android.R.drawable.ic_dialog_alert)
                    .show();

            Looper.loop(); */

        }



    }

}

我使用函数connectToSocket();调用类 SocketThread 有一个名为“whatistodo”的字符串参数。 参数可以是“读取”或“关闭”

        protected Boolean connectToSocket(String whatistodo) {

    Thread obj = new SocketThread(whatistodo);
    obj.start();

    return false;

}

如果有互联网连接,则会调用函数connectToSocket("read")。 函数connectToSocket("close")onBackPressed调用。

但在关闭套接字后,我仍然收到消息。

如何解决这个问题?

问候,Baldoius

1 个答案:

答案 0 :(得分:1)

每次创建SocketThread时,它都会创建一个新套接字。如果" whatistodo"设置为"关闭",它将创建一个新套接字并立即关闭它。使用" whatistodo"创建的主题等于"读"有自己的套接字,所以它将继续运行并从中读取。

您需要确保所有线程共享同一个套接字实例。