Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,218
#1

Обработка обрыва соединения - Android

19.10.2015, 16:46. Просмотров 367. Ответов 7
Метки нет (Все метки)

У меня есть TCP клиент андроид и TCP сервер на Qt в Wibndows. И вот такой вопрос, если я передаю данные с клиента на сервер и произошел внезапно обрыв соединения(пропал вай фай например), данные в результате были переданы не все которые я запланировал для передачи по данной сессии, а только часть данных передалась. Так вот как я могу обработать на клиенте андроид обрыв соединения?? Как я могу программно узнать когда произошел этот обрыв соединения и принять какие то меры??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2015, 16:46     Обработка обрыва соединения
Посмотрите здесь:

Проверка наличия интернет соединения Android
Android Как сделать лог интернет соединения Android приложения
Android Как скорость соединения зависит от скорости интернета?
Проверка интернет соединения Android
Android Как выводить сообщение об отсутствии соединения с интернетом?
Android Проверка интернет соединения
Проверка качества соединения с сайтом Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
19.10.2015, 21:12     Обработка обрыва соединения #2
при любом раскладе, сервер что-то должен ответить. при получении ответа - считайте, что данные переданы.
во всех остальных случаях, включая Exception - считайте, что данные не переданы.
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,218
19.10.2015, 22:30  [ТС]     Обработка обрыва соединения #3
а сокет возвращает какое то исключение вслучае обрыва связи??
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
20.10.2015, 01:02     Обработка обрыва соединения #4
сокет, при обрыве связи, уже ничего не вернет.
а вот Ваш код, который потерял канал передачи - должен. попробуйте. :-)
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
20.10.2015, 11:02     Обработка обрыва соединения #5
yura91, вывалится catch с IOException (ошибка ConnectionRefused или что-то типа этого)
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,218
20.10.2015, 13:34  [ТС]     Обработка обрыва соединения #6
Например, если было установлено соединение и передавались данные с клиента на сервер TCP, и потом пропал вай фай, то вывалится исключение IOException, то есть нужно catch с IOException предусмотреть для этого случая ??
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
20.10.2015, 13:50     Обработка обрыва соединения #7
yura91, IOException является проверяемым исключением, если не обернуть в try-catch компилятор не соберёт такой код
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2015, 14:50     Обработка обрыва соединения
Еще ссылки по теме:

Каким способом вы определяете наличие соединения с интернетом Android
Android Ошибка соединения с сервером после обновления OC с 4.4 до 5
Android Проверка соединения с сайтом через HttpUrlConnection
Android Не выбрать устройство для соединения Bluetooth
Проверка Socket на наличие соединения Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,218
20.10.2015, 14:50  [ТС]     Обработка обрыва соединения #8
ну да я согласен но дело в том что вот код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
public class Client extends Activity {
 
    private Socket socket;
 
    private static final int SERVERPORT = 8888;
    private static final String SERVER_IP = "192.168.1.4";
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      
        
        new Thread(new ClientThread()).start();
    }
    
    public void onClick(View view) {
        try {
            //Log.d("Func", "try");
            EditText et = (EditText) findViewById(R.id.EditText01);
            String str = et.getText().toString();
 
            Cursor c = getContentResolver().query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                    null, null, null);
            PrintWriter out = new PrintWriter(new BufferedWriter(
                    new OutputStreamWriter(socket.getOutputStream(), Charset.forName("UTF-8"))),
                    true);
            while (c.moveToNext()) {
                //Log.d("Func", "contactName");
 
 
 
                String contactName = c
                        .getString(c
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
 
                //Log.d("Func", contactName);
                String phNumber = c
                        .getString(c
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                //Log.d("Func",phNumber );
 
                out.flush();
 
                out.println(contactName);
                out.println(phNumber);
                /*PrintWriter out = new PrintWriter(new BufferedWriter(
                        new OutputStreamWriter(socket.getOutputStream(), Charset.forName("UTF-8"))),
                        true);
                out.flush();
 
                out.println(contactName);
 
                out.close();*/
            }
 
            out.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
            Log.d("Func", "обрыв");
        } catch (Exception e) {
            e.printStackTrace();
 
        }
    }
 
    class ClientThread implements Runnable {
 
        @Override
        public void run() {
            
            try {
                InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
 
                socket = new Socket(serverAddr, SERVERPORT);
 
            } catch (UnknownHostException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
 
 
            }
 
        }
 
    }
}
Если на сервере преждевременно закрывается сокет то передаются не все данные а исключение
Java
1
2
3
4
catch (IOException e) {
            e.printStackTrace();
            Log.d("Func", "обрыв");
}
срабатывает только при втором нажатии на кнопку(то есть первый раз цикл внутри onClick проходит нормально, несмотря на то, что сокет закрылся во время передачи данных) а при первом нажатии исключение не срабатывает почему?? И как тогда установить обрыв соединения??

Добавлено через 12 минут
при любом раскладе, сервер что-то должен ответить
но ждать ответ можно очень долго. А можно как нибудь подождать ответ сервера определенное время и если ответ не пришел считать что данные не переданы?? Как такое реализовать??
Yandex
Объявления
20.10.2015, 14:50     Обработка обрыва соединения
Ответ Создать тему
Опции темы

Текущее время: 22:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru