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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Shuklin Sergey
6 / 6 / 4
Регистрация: 03.05.2013
Сообщений: 97
#1

Клиент-серверная архитектура на основе сокетов - Программирование Android

22.05.2013, 04:39. Просмотров 1527. Ответов 5
Метки нет (Все метки)

Есть такой код клиента под андроид. Сервер написан на си++. Подключаю ноут и телефон в одну сеть. Сервер работает точто правильно, но возникает вопрос, все ли правильно с клиентом - андроидом?

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
package com.example.client_servercpp_android;
 
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.net.Socket;
//import java.util.Scanner;
 
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
 
//Цей код корисного нічого робити не повинен. Ми просто відкриваємо з'єднання з иншим пристроє.
//Як нам у мережі (чи це интерьнет, чи локальна - це однакового) розрізняти, куди надсилати инхвормацію? 
public class MainActivity extends Activity {
      /** Called when the activity is first created. */
        Socket jSocket = null;
 
//Це робиться за ipAddress та port'ом. Айпі-адреса означає пристрій, з яким ведеться обмін.  
        private final String ipAddress = "192.168.43.74";
 
//А кожен пристрій, комп наприклад, то він хоче одночасно і скай тримати,
//і оновлення завантажувати, і сайт розкривати - тобто аби під'єднання кожного разу
//не переривати з'єднання встановлються більш-менш постійні з'єднання,
//і аби вони їх розрізняти ми для кожного з'єднання маємо своє віртуальне таке гніздо, це називають "порт".
//Тобто як до міста може бути прибито багато кораблів, у кожного гнізді-порті по кораблю. Їх наприклад, від 1 до 65535 (приблизно).
       private final int port =1234;
 
//Через цей потік ми пишемо инхвормацію
        PrintWriter out = null;
 
//Через цей читаємо 
        BufferedReader inFromServer;
        String inTxt;
 
        @Override
        public void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState);
// Встановлюємо потрібну нам розмітку вікна
            setContentView(R.layout.activity_main); 
 
            try
            {
//Створюємо з'єднання (сокет - в перекладі "різетка") на певний пристрій, до певного порту.
                jSocket = new Socket(ipAddress, port);
                
                
                Log.v("Here", "good");
            }
            catch(Exception ee)
            {
                Log.v("Here", "bad");
            }
//Далі було б логічно бачити якесь писання в мережу, але поки цього бачу, нема. 
        }
    }
а именно, есть подозрения, что в 44 строке телефон создает сокет, но ничего с ним не делает! правильно я понимаю систему? созданый сокет еще нужно отправить на попытку подключения...?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2013, 04:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Клиент-серверная архитектура на основе сокетов (Программирование Android):

Архитектура клиент серверного приложения - Программирование Android
Добрый день. Возникла идея проекта, но как реализовать его я не представляю. Есть клиентское андроид приложение, в котором присутствует...

Архитектура приложения ирк-клиент для андроид - Программирование Android
Доброго времени суток. Я решил написать в первый раз в своей жизни приложения для android – irc клиент. Опыта написания под эту...

Архитектура клиент-серверного приложения с off-line режимом - Программирование Android
Доброго дня. Столкнулся со следующим вопросом на тестировании: Создаётся Android-приложение, работающее с данными на сервере. В...

Клиент-серверная архитектура - JavaScript
Всем привет! Тут возникла такая дилемма. Схема, когда сервер получает http-запрос от клиента, рендерит данные, и возвращает html...

Клиент-серверная архитектура на VB 6.0 - Visual Basic
Добрый день! Уважаемые знатоки Visual Basic 6.0, хочу поговорить с вами вот на такую тему. Есть задача сделать базу данных по...

Клиент-серверная архитектура - PHP БД
Можно ли организовать посредством PHP клиент-серверную архитектуру для связи с БД, на одном компьютере локально?.Т.е клиент, сервер и база...

5
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
22.05.2013, 10:36 #2
Если я правильно помню, то при таком создании сокета он подключаеЦа сразу. но вообще у сокета есть метод коннект и я предпочитаю делать иначе:
Java
1
2
3
4
Socket soc = new Socket(); // создаем новый сокет
soc.bind(null); // биндим его на определенный порт устройства (null - биндиЦа автоматически на любой свободный порт)
soc.connect(new InetSocketAddress(m_host, m_port),5000); // подключаем передавая адрес, порт и таймаут в мс.
soc.setKeepAlive(true); // указываем сокету существовать вечно, чтобы система не закрыла его при простое
1
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
23.05.2013, 22:59 #3
а как принимать сообщения от сервера? в вечном цикле?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.05.2013, 23:04 #4
spydark91, возможно это то, что вам нужно - Google Cloud Messaging for Android
1
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
23.05.2013, 23:16 #5
полезная ссылка, но я о чистых сокетах, без вмешательства гугла
0
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
24.05.2013, 11:09 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
не совсем в вечном цикле, но вы почти угадали. нужно запустить отдельный поток и в нем слушать созданный сокет. примерно вот так:
Java
1
2
3
4
5
6
private void CreateThread()
{
        // создаем новый поток и в него передаем объект Runnable для обработки этого потока
    listenThread = new Thread(null, doBackgroundListening,"BackgroundListen");                                                                                                          
    listenThread.start();
}
объект Runnable для обработки
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private Runnable doBackgroundListening = new Runnable() 
{
    @Override
    public void run() 
    {
        if(Connect()) // здесь создаем сокет и подключаемся
        {               
            isSterted = true;       
            isRcvData= true;
            handler.post(doUpdateGUIonStartSucces); // для обновления UI из этого потока
            backgroundListening();  // собственно вызываем метод в котором создаем и слушаем сокет          
        }
        else
        {
            isSterted=false;
            handler.post(doUpdateGUIonStartError);
        }
    }
};
метод в котором создаем и слушаем сокет
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
private void backgroundListening()
    {                       
        try 
        {
            int len;
            inp = soc.getInputStream();
            Context context = getApplicationContext();
            incomData = new byte[0];
            boolean isReaded = false;           
            byteTransfered=0;
            soc.setReceiveBufferSize(Integer.MAX_VALUE);
            while(isRcvData)
            {                                                               
                byte bufin[] = new byte[1];                                                                                             
                                
                while((len=inp.read(bufin)) !=-1)               
                {                                                                                                   
                    // здесь читаем данные из буфера                                                    
                }                               
            }
        } 
        catch (IOException e) 
        {           
            Log.e("IO ERROR:", e.getMessage() );        
        }
        catch (Exception ex) 
        {                   
            Log.e("IO ERROR 2:", ex.getMessage() );         
        }       
        
    }
метод в котором создаем сокет и подключаемся
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
private boolean Connect()
    {
        boolean isConnected = false;
        try
        {                                                   
            soc = new Socket();
            soc.bind(null);
            
            soc.connect(new InetSocketAddress(m_host, m_port),5000);            
            soc.setKeepAlive(true);                     
            isConnected = true;                         
            
        }
        catch(NumberFormatException ex)
        {           
            Log.e("CONNECT ERROR - NumForm",ex.getMessage());       
        }
        catch(SocketTimeoutException ex)
        {
            Log.e("CONNECT ERROR - SockTimeOut",ex.getMessage());
        }
        catch(Exception ex)
        {           
            Log.e("CONNECT ERROR - Uncnown",ex.getMessage());
        }       
        
        return isConnected;
    }
1
24.05.2013, 11:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2013, 11:09
Привет! Вот еще темы с ответами:

Создать на основе сокетов клиент/серверное визуальное приложение - Java Сети
Создать на основе сокетов клиент/серверное визуальное приложение Сервер рассылает сообщения выбранным из списка клиентам. Список...

Клиент-сервер на основе SocketTCP архитектура написания - C#
Добрый день Гуру, есть у меня задача: Необходимо написать клиент - серверную программу. Сервер на базе WinServer 2012 R2 и БД MSSQL 2012....

Создание распределенных приложений в C# с использованием интерфейса сокетов. Серверная часть - C#
Задание. Создайте многопоточное приложение серверной стороны согласно приведенному полному листингу кода: //MEchoServer.cs ...

Клиент-серверная БД - Delphi БД
Какую СУБД взять для реализации Клиент серверной БД, какая лучше подойдёт для Delphi? Первый раз создаю БД, поэтому не судите строго


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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