Нашёл пример http://stackoverflow.com/questions/5135 ... -asynctask
Socket Client, но не могу понять почему не завершается поток не выходит из цикла While в doInBackground....
Код: Выделить всё
public class NetworkTask extends AsyncTask<Void, String, Boolean> {
// Network Socket
public InputStream is; // Network Input Stream
public OutputStream os; // Network Output Stream
String ip, prt;
public NetworkTask(String ip, String prt) {
// TODO Auto-generated constructor stub
this.ip = ip;
this.prt = prt;
}
@Override
protected void onPreExecute() {
Log.i("AsyncTask", "onPreExecute");
}
@Override
protected Boolean doInBackground(Void... params) { // This runs on a
// different thread
boolean result = false;
try {
Log.i("AsyncTask", "doInBackground: Creating socket");
SocketAddress sockaddr = new InetSocketAddress(ip,
Integer.parseInt(prt)); // 192.168.2.102 118.139.161.101
nsocket = new Socket();
nsocket.connect(sockaddr, 10000); // 10 second connection
// timeout
if (nsocket.isConnected()) {
Log.i("AsyncTask",
"doInBackground: nsocket.isConnected=true");
is = nsocket.getInputStream();
os = nsocket.getOutputStream();
Log.i("AsyncTask",
"doInBackground: Socket created, streams assigned");
Log.i("AsyncTask",
"doInBackground: Waiting for inital data...");
Connected = true;
int c = 0;
while (Connected) {
StringBuffer sbl = new StringBuffer();
while (((c = is.read()) != '\n') && (c != -1) && Connected) {
if ((char) c == '~') {
break;
}
sbl.append(((byte) c));
}
String my = new String(sbl.toString());
publishProgress(my);
} // while (Connected)
} // if (nsocket.isConnected())
try {
is.close();
os.close();
nsocket.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
Log.e("AsyncTask", "doInBackground: IOException=");
e.printStackTrace();
result = true;
Connected = false;
} catch (Exception e) {
e.printStackTrace();
Log.e("AsyncTask",
"doInBackground: Exception=" + e.getMessage());
result = true;
Connected = false;
}
Log.i("AsyncTask", "doInBackground: Finished");
log("doInBackground: Finished");
Connected = false;
return result;
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
Log.i("AsyncTask", "onProgressUpdate: " + values.length
+ " bytes received.");
}
@Override
protected void onCancelled() {
super.onCancelled();
Connected = false;
Log.i("AsyncTask", "Cancelled.");
disconnect.setVisibility(View.GONE);
btnStart.setVisibility(View.VISIBLE);
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
Log.i("AsyncTask", "onPostExecute: Completed with an Error="
+ err);
} else {
Log.i("AsyncTask", "onPostExecute: Completed. Cсоединение закрыто!"");
}
Connected = false;
}
}
В этом примере вроде есть решение ноя не могу разобраться как это реализовать.
Может у кого есть более интересные и правильные решения Socket Client?
Заранее благодарен за ответ.