Привет, я хочу сделать что-то вроде этого: я хочу отправить данные на сервер и дождаться получателя byte[] от сервера. сервер отправит массив, когда все будет получено. Но я хочу сделать тайм-аут, потому что иногда сервер не получает все и ничего не отправляет.
Я делаю это, но это не работает. Мое приложение всегда ждет byte[]
public class MyClientTask1 extends AsyncTask {
String dstAddress;
int dstPort;
String response = "";
byte[] data;
int count;
MyClientTask1(String addr, int port) {
dstAddress = addr;
dstPort = port;
}
byte[] buffer = new byte[1024];
@Override
protected byte[] doInBackground(Void... arg0) {
// if (pingHost(1000)) {
socket = null;
try {
socket = new Socket(dstAddress, dstPort);
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
String number = "10";
String sendMessage = number + "\n";
bw.write(sendMessage);
bw.flush();
InputStream stream = socket.getInputStream();
data = new byte[100];
count = stream.read(data);
if(stream.read() == null)
Thread.sleep(2000);
count = stream.read(data);
if( count != 0){
data = null;
}
// while ((count = stream.read(data)) != -1){
// count=stream.read(data);
// }
} catch (UnknownHostException e) {
e.printStackTrace();
isSuccsess = false;
response = "UnknownHostException: " + e.toString();
} catch (IOException e) {
e.printStackTrace();
Log.d("la", "nie udało sie");
isSuccsess = false;
response = "IOException: " + e.toString();
} catch (InterruptedException e) {
e.printStackTrace();
}
return data;
}
@Override
protected void onPostExecute(byte[] bytes) {
super.onPostExecute(bytes);
if(bytes != null) {
showToast("zgadza się");
} else {
showToast("nie zgadza się");
}
}
else{
showToast("nie ma nic");
}
pbWheel.setVisibility(View.INVISIBLE);
}
Подробнее здесь: https://stackoverflow.com/questions/407 ... rom-server