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

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

Восстановить пароль Регистрация
 
Arion32
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 33
14.11.2016, 14:37     Проверка Socket на наличие соединения #1
Помогите сделать проверку сокета перед подключением.

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 минуты
или как сделать правильнее?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2016, 14:37     Проверка Socket на наличие соединения
Посмотрите здесь:

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

я хочу чтобы при нажатии кнопки у меня сначала проверялось - есть ли сокет. и если его нет то сокет создается. если есть сокет закрывается.
vxg
Модератор
 Аватар для vxg
2639 / 1650 / 156
Регистрация: 13.01.2012
Сообщений: 6,212
15.11.2016, 10:16     Проверка Socket на наличие соединения #6
Arion32, если сокет есть (не null) - значит есть подключение. если во время работы с сокетом зафиксированы ошибки считаем что подключение прервано и присваиваем сокету null предварительно его закрыв конечно же
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2016, 10:44     Проверка Socket на наличие соединения
Еще ссылки по теме:

Android Проверка строки на наличие букв и символов
Каким способом вы определяете наличие соединения с интернетом Android
Android Проверка соединения с сайтом через HttpUrlConnection

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

Или воспользуйтесь поиском по форуму:
zoleg
13 / 13 / 1
Регистрация: 10.01.2012
Сообщений: 103
15.11.2016, 10:44     Проверка Socket на наличие соединения #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();
            }
        }
Не применяйте код "напрямую". Тут при коннекте ПЕРВЫМ СЕРВЕР, а не клиент, посылает сообщение о том что он готов принять запрос, и только потом клиент скидывает запрос. Просто махните местами прием->передача и все станет как вам надо.
Yandex
Объявления
15.11.2016, 10:44     Проверка Socket на наличие соединения
Ответ Создать тему
Опции темы

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