我有一个Activity调用异步任务来通过预定义的InetAddress接受套接字连接。异步任务中的getInputStream任务
的异步任务调用另一个异步任务监听的消息。但它挂在获得输入流
我一直在货架我几个小时的大脑和想不通为什么它被挂...任何帮助请。
public void startSocketListener(InetAddress groupOwnerAddress) {
// TODO Auto-generated method stub
AcceptClientThread accept;
try {
accept = new AcceptClientThread();
accept.execute();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public class AcceptClientThread extends AsyncTask<Void, String, String>{
public AcceptClientThread() throws IOException{
}
@Override
protected void onCancelled() {
// TODO Auto-generated method stub
try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e("CONNECTION ERR", "Could not close serverSocket " + e.toString());
}
super.onCancelled();
}
@Override
protected String doInBackground(Void... params) {
try {
serverSocket = new ServerSocket(port);
} catch (IOException e) {
Log.e("CONNECTION ERR","Could not listen on port: " + port);
onCancelled();
}
while (listening){
try {
Log.i("CONNECTION", "AWAITING CONNECTION TO CLIENT");
Socket newSocket = serverSocket.accept();
Log.i("CONNECTION", "CONNECTED TO CLIENT");
ListenerThread lThread = new ListenerThread(newSocket);
lThread.execute("Do it");
Log.i("CONNECTION", "ACCEPTED CLIENT");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
onProgressUpdate("could not accept client");
}
}
Log.i("CONNECTION", "close socket");
try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "table connected";
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
// received data is first element in the String
//Toast.makeText(KitchenActivity.this, values[0], Toast.LENGTH_SHORT).show();
}
}
public class ListenerThread extends AsyncTask<String, Order, Void> {
private Socket socket;
ObjectInputStream ois;
public ListenerThread(Socket socket){
this.socket = socket;
try {
ois = new ObjectInputStream(this.socket.getInputStream()); //hangs here
} catch (StreamCorruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
“倾听”曾经“虚假”?现在看起来你有一个'无限循环',它一直试图创建一个新的'Socket',除非我失去了一些东西。 – codeMagic 2013-03-21 20:15:29
当用户关闭活动或按下按钮时,listen的确会相等。这只是侦听传入的连接 – Intern87 2013-03-21 20:19:40