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

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

Войти
Регистрация
Восстановить пароль
 
Arion32
5 / 5 / 1
Регистрация: 17.10.2016
Сообщений: 159
#1

Проверка Socket на наличие соединения - Программирование Android

14.11.2016, 14:37. Просмотров 255. Ответов 6
Метки нет (Все метки)

Помогите сделать проверку сокета перед подключением.

Java
1
2
3
4
5
6
7
8
9
public void onClick(View view) {
if (socket.isClosed()) {
socket = new Socket(ip, port);
inputStream = socket.getInputStream();
outputStream = socket.getOutputStream();
}
else {
socket.close();
}
что не так?(

Добавлено через 4 минуты
или как сделать правильнее?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2016, 14:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка Socket на наличие соединения (Программирование Android):

Каким способом вы определяете наличие соединения с интернетом - Программирование Android
Знаю весь интернет кишит примерами... Но вот каким "хорошим", оптимальным решением пользуетесь вы товарищи? Есть ли заложенный...

Проверка интернет соединения - Программирование Android
Как же всё-таки прописать грамотную проверку интернет соединения? Необходимо при включенном wi-fi и отсутствии интернета в WebView...

Проверка интернет соединения - Программирование Android
Добрый день , я хотел бы проверить интернет соединение , у меня уже есть функция: public boolean checkNetworkStatus(Context context){ ...

Проверка наличия интернет соединения - Программирование Android
Если в public void onStart() { super.onStart(); } вставить код проверки на включен ли интернет и если не...

Проверка качества соединения с сайтом - Программирование Android
Иногда приложение падает при коннекте к сайту. Причем происходит это только на телефоне, в эмуляторе все хорошо. Подозреваю, что проблема...

Проверка соединения с сайтом через HttpUrlConnection - Программирование Android
я нашла кучу информации, где после подключения что-либо выдает. Как написать программный код, чтоб выдавало только удалось подсоединиться...

6
Pablito
2476 / 1960 / 611
Регистрация: 12.05.2014
Сообщений: 6,863
Завершенные тесты: 1
14.11.2016, 14:39 #2
разрешение на INTERNET есть в манифесте?
0
Arion32
5 / 5 / 1
Регистрация: 17.10.2016
Сообщений: 159
14.11.2016, 14:46  [ТС] #3
Цитата Сообщение от Паблито Посмотреть сообщение
разрешение на INTERNET есть в манифесте?
есть
0
Pablito
2476 / 1960 / 611
Регистрация: 12.05.2014
Сообщений: 6,863
Завершенные тесты: 1
14.11.2016, 14:56 #4
чем докажешь?
да и вообще, в чем собственно проблема? а то из первого сообщения непонятно что ты хочешь
0
Arion32
5 / 5 / 1
Регистрация: 17.10.2016
Сообщений: 159
14.11.2016, 15:05  [ТС] #5
<uses-permission android:name="android.permission.INTERNET" />

я хочу чтобы при нажатии кнопки у меня сначала проверялось - есть ли сокет. и если его нет то сокет создается. если есть сокет закрывается.
0
vxg
Модератор
3169 / 1972 / 221
Регистрация: 13.01.2012
Сообщений: 7,577
15.11.2016, 10:16 #6
Arion32, если сокет есть (не null) - значит есть подключение. если во время работы с сокетом зафиксированы ошибки считаем что подключение прервано и присваиваем сокету null предварительно его закрыв конечно же
1
zoleg
16 / 16 / 1
Регистрация: 10.01.2012
Сообщений: 162
15.11.2016, 10:44 #7
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
public class TcpClient {
 
    public static String SERVER_IP = MutTempoDate.TCP_SERVER; //Server IP address
    public static int SERVER_PORT = Integer.valueOf(MutTempoDate.TCP_SER_PORT);//Server port
    // message to send to the server
    private String mServerMessage;
    // sends message received notifications
    private OnMessageReceived mMessageListener = null;
    // while this is true, the server will continue running
    private boolean mRun = false;
    // used to send messages
    private PrintWriter mBufferOut;
    // used to read messages from the server
    private BufferedReader mBufferIn;
    private Socket socket;
    public static boolean normal_close=false;
 
    /**
     * Constructor of the class. OnMessagedReceived listens for the messages received from server
     */
    public TcpClient(OnMessageReceived listener) {
 
        mMessageListener = listener;
    }
 
    /**
     * Close the connection and release the members
     */
 
    @Subscriber(tag = "TCP_SEND_MSG")
    private void updateEvents(EventTcpMessage event) {
 
        if (event.message.equals("disconnect")) {
            normal_close = true;
            mRun = false;
            Log.e(TetGlobalData.TAG,"!!!!!!!!!!! STOPING CLIENT !!!!!!!!!!!!!!!!!");
            stopClient();
        } else {
            Log.d(TetGlobalData.TAG, "updateEvents TcpClient/sendMessage=" + event.message);
            if (mBufferOut != null && !mBufferOut.checkError()) {
                mBufferOut.println(event.message);
                mBufferOut.flush();
                //sends the message to the server
 
        }
 
    }
    }
 
    public boolean stopClient() {
 
 
        mRun = false;
 
        try {
            socket.close();
        } catch (IOException e) {
            Log.d(TetGlobalData.TAG,"TcpClient stopClient() IOException e");
            e.printStackTrace();
        }
 
        if (mBufferOut != null) {
            mBufferOut.flush();
            mBufferOut.close();
        }
 
        mMessageListener = null;
        mBufferIn = null;
        mBufferOut = null;
        mServerMessage = null;
        normal_close = true;
       // mMessageListener.messageReceived("shutdown");
        return true;
    }
 
    public void run() {
 
        Log.e(TetGlobalData.TAG,"!!!!!!!!!!!!!! New run TcpClient !!!!!!!!!!!!");
 
        mRun = true;
        EventBus.getDefault().register(this);
 
        TetTempoDate.tcpCl = this;
 
        try {
            //here you must put your computer's IP address.
            InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
 
            Log.e("TcpClient", "A: Connecting...");
 
            //create a socket to make the connection with the server
            socket = new Socket(serverAddr, SERVER_PORT);
 
 
            try {
 
//                //sends the message to the server
//                mBufferOut = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
 
                //receives the message which the server sends back
                mBufferIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                //sendMessage("variable_ATS-Command: Hellow\n\n");
                mBufferOut = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
                //in this while the client listens for the messages sent by the server
                while (mRun) {
 
                    mServerMessage = mBufferIn.readLine();
 
                    if (mServerMessage != null && mMessageListener != null) {
                        //call the method messageReceived from MyActivity class
                        mMessageListener.messageReceived(mServerMessage);
                    }
 
                }
                if (mServerMessage != null || mMessageListener != null){
                    String message = "CON_OK";
                    EventBus.getDefault().post(new EventTcpMessage(message), "for_ConnectTask");
 
                Log.e("RESPONSE FROM SERVER", "S: Received Message: '" + mServerMessage + "'");
                }
                mBufferOut = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
 
            } catch (Exception e) {
                if(mRun) {
                    Log.e("TcpClient", "B: Error", e);
                }
                else{
                    Log.d("TcpClient", "BB: Closed", e);
                    if(!normal_close) {
                        String message = "CON_FAIL";
                        EventBus.getDefault().post(new EventTcpMessage(message), "for_ConnectTask");
                    }
                }
 
            } finally {
                //the socket must be closed. It is not possible to reconnect to this socket
                // after it is closed, which means a new socket instance has to be created.
               // stopClient();
 
            }
 
 
        } catch (Exception e) {
 
            Log.e("TcpClient", "C: Error", e);
 
            if (normal_close != true){
            String message = "CON_FAIL";
            EventBus.getDefault().post(new EventTcpMessage(message), "for_ConnectTask");
//            stopClient();
            }
        }
Не применяйте код "напрямую". Тут при коннекте ПЕРВЫМ СЕРВЕР, а не клиент, посылает сообщение о том что он готов принять запрос, и только потом клиент скидывает запрос. Просто махните местами прием->передача и все станет как вам надо.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2016, 10:44
Привет! Вот еще темы с ответами:

Проверка строки на наличие букв и символов - Программирование Android
Добрый вечер! Как в android проверить editText на наличие букв и символов? Мне нужно, что бы программа пропускала только цифры и...

Socket Android Client and Java Socket Server - Программирование Android
Доброго времени суток.Пытаюсь сделать простое клиент-серверное приложение. Клиент - приложение на Android устройстве. Сервер - Приложение...

Проверка на наличие соединения с БД - C++ Builder БД
Добрый день! Использую DbX, класс TSQLConnection. Каким образом можно определить, что соединение отсутствует ? Как тестировал: успешно...

Потеря соединения TClient Socket - TServer Socket - Delphi
После коннекта клиента к серверу минут 20 соединение живёт и клиенты получают сообщения через длительное время они перестают получать...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
15.11.2016, 10:44
Ответ Создать тему
Опции темы

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