我正面临一个与服务器建立套接字连接的Android服务的问题,在建立连接后,有时(并非总是)线程在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();
}
}
}
} }
请帮我调试一下。我已经放了几个打印语句和断点,但没有任何效果。