【发布时间】:2015-05-29 05:09:08
【问题描述】:
我曾经使用AsyncTask建立服务器socket连接,然后接受客户端连接,最后每次客户端向服务器发送数据都需要更新GUI。
但是当客户端发送数据时,GUI 没有更新,如果客户端断开连接,那么 GUI 将更新。当客户端建立三个连接然后断开连接时会发生这种情况,然后 GUI 将被更新。但之后 GUI 将不会更新,然后我看不到客户端发送到服务器的数据。如何解决这个问题。
public class ServerSocket_test extends Activity {
private TextView textView;
private EditText editIP;
private EditText editMessage;
private Socket socketClient=null;
private PrintWriter printWriterClient=null;
public static final int LISTEN_PORT = 6000;
private class TaskServerSocket extends AsyncTask<Void, Void, Void> {
@SuppressLint("NewApi")
@Override
protected Void doInBackground(Void... v) {
try {
ServerSocket serverSocket = new ServerSocket(LISTEN_PORT);
while (true) {
socketClient = serverSocket.accept();
TaskRead taskRead = new TaskRead();
taskRead.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, socketClient);
}
} catch (IOException ex) {
Log.e("SocketsChat", ex.getLocalizedMessage());
}
return null;
}
}
private class TaskRead extends AsyncTask<Socket,String,Void> {
String in="";
@Override
protected Void doInBackground(Socket... socketClient) {
String s;
try {
BufferedReader input = new BufferedReader(
new InputStreamReader(socketClient[0].getInputStream()));
while (true){ //(socketClient[0].isConnected()) {
while ((s=input.readLine())!=null) {
publishProgress(s, socketClient[0].getInetAddress().toString());
}
}
} catch (IOException exc) {
Log.d("SocketChat", exc.getLocalizedMessage());
}
return null;
}
@Override
protected void onProgressUpdate(String... strings) {
textView.append(strings[1]+": "+strings[0]+"\n");
in=in+strings;
}
@Override
protected void onPostExecute(Void result){
textView.append(in);
}
}
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_server_socket_test);
textView = (TextView) findViewById(R.id.textView1);
TaskServerSocket taskServerSocket = new TaskServerSocket();
taskServerSocket.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} }
【问题讨论】:
标签: android sockets android-asynctask serversocket