我正面临一个Android服务的问题,它与服务器 Build 套接字连接,在 Build 连接后,有时(并非总是)线程在readline函数中挂起,即使服务器成功发送数据附加新行字符每条消息,android服务都不会读取任何卡在readline()中的内容 .

我尝试过简单的read()来逐个字符地阅读,但它也挂在那里 .

public class TCPService extends Service {
Socket socket;
PrintStream os;
String message;
private Messenger messageHandler;

private final IBinder myBinder = new LocalBinder();

public TCPService() {
}

public class LocalBinder extends Binder {
    public TCPService getService() {
    System.out.println("I am in Localbinder ");
    Log.d("abc","I am in Localbinder ");
    return TCPService.this;

    }
}


@Override
public IBinder onBind(Intent intent) {
System.out.println("I am in Ibinder onBind method");
Log.d("abc","I am in Ibinder onBind method");
    // return myBinder;
return null;
}

public void IsBoundable(){
    Toast.makeText(this,"I bind like butter", Toast.LENGTH_LONG).show();
}


@Override
public void onCreate() {
    super.onCreate();

}

public int onStartCommand(Intent intent, int flags, int startId) {
    // super.onStart(intent, startId);
    Log.d("abc","Service Started");
    Log.d("abc", "Received start id " + startId + ": " + intent);
    Toast.makeText(this, "Service Started TCPService", Toast.LENGTH_LONG).show();
    Runnable connect = new connectSocket();
    new Thread(connect).start();
    return START_STICKY;
}



class connectSocket implements Runnable {
    @Override
    public void run() {
        boolean running = true;

        //while (running)

            try {
                String msg;          
                InetAddress serverAddr = InetAddress.getByName("X.X.X.X");
                socket = new Socket();
                socket.connect(new InetSocketAddress(serverAddr, 4444));
                Log.d("abc", "socket variable is " + socket);
                BufferedReader in = new BufferedReader(new  InputStreamReader(socket.getInputStream(), "US-ASCII"));
               BufferedWriter out = new BufferedWriter(new  OutputStreamWriter(socket.getOutputStream(), "US-ASCII"));
                out.write("clientapp");
                out.write("\n");
                out.flush();
                while (true) {
                try {
                        msg = in.readLine();
                        Log.d("abc", "msg =" + msg);
                        if (msg.equalsIgnoreCase("END")) {
                            break;
                        } else if (msg.length() != 0) {
                            message = msg;
                            Log.d("abc", "you got reply ---" + message);
                            sendBroadcast();
                        } else {
                            Log.d("abc", "nothing read from server, msg = " + msg);
                            break;
                        }

                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                        Log.d("abc", "IOException by readLine " + e1.getMessage());
                        break;
                    }

                }
                in.close();
                out.close();
                socket.close();

            } catch (UnknownHostException e1) {

                e1.printStackTrace();
                Log.d("abc", "UnknownHostException " + e1.getMessage());
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
                Log.d("abc", "IOException " + e1.getMessage());


            } finally {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
 }

}}

请帮我调试一下 . 我已经放了几个打印语句和断点,但没有任何效果 .