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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.87
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
#1

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

25.03.2013, 15:17. Просмотров 2962. Ответов 6
Метки нет (Все метки)

Всем привет, помогите,пжлста, разобраться. Пытаюсь сделать простое клиент-сервер соединение (удп). Сервер запускается, но когда запускаю клиента на эмуляторе в андроиде, нажимаю кнопку, вроде как ничего не происходит.
В консоле сервера ничего не появляется. В чем может быть проблема? в jave и androide я новичок.

андроид:
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
package com.asd.soed;
 
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
 
public class MainActivity extends Activity {
    Button button;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Thread thread=new Thread (new Client());
                thread.start();
            }
        });
        
        
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
}
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
package com.asd.soed;
 
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
 
import android.util.Log;
 
public class Client implements Runnable {
Client()
{
    run();
}
    @Override
    
    public void run() {
        // TODO Auto-generated method stub
        try {
 
            String messageStr = "Hello Android!";
            int server_port = 9999;
            DatagramSocket s = new DatagramSocket();
            InetAddress local = InetAddress.getByName("127.0.0.1");
            int msg_length = messageStr.length();
            byte[] message = messageStr.getBytes();
            DatagramPacket p = new DatagramPacket(message, msg_length, local,
                    server_port);
            s.send(p);
        } catch (Exception e) {
 
        }
    }
сервер:
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
package javaapplication16;
 
import java.io.*; 
import java.net.*; 
  
class JavaApplication16 { 
  public static void main(String args[]) throws Exception 
    { 
     try
     { 
      DatagramSocket serverSocket = new DatagramSocket(9876); 
  
      byte[] receiveData = new byte[1024]; 
      byte[] sendData  = new byte[1024]; 
  
      while(true) 
        { 
  
          receiveData = new byte[1024]; 
 
          DatagramPacket receivePacket = 
             new DatagramPacket(receiveData, receiveData.length); 
 
          System.out.println ("Waiting for datagram packet");
 
          serverSocket.receive(receivePacket); 
 
          String sentence = new String(receivePacket.getData()); 
  
          InetAddress IPAddress = receivePacket.getAddress(); 
  
          int port = receivePacket.getPort(); 
  
          System.out.println ("From: " + IPAddress + ":" + port);
          System.out.println ("Message: " + sentence);
 
         String capitalizedSentence = sentence.toUpperCase(); 
 
          sendData = capitalizedSentence.getBytes(); 
  
          DatagramPacket sendPacket = 
             new DatagramPacket(sendData, sendData.length, IPAddress, 
                               port); 
  
          serverSocket.send(sendPacket); 
 
        } 
 
     }
      catch (SocketException ex) {
        System.out.println("UDP Port 9999 is occupied.");
        System.exit(1);
      }
 
    } 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2013, 15:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос клиент-сервер (Программирование Android):

Клиент-Сервер - Программирование Android
Во вложении фото моей активности. На ней отображается мое местоположение в виде маркера. Как мне отобразить местоположение другого...

клиент-сервер - Программирование Android
Dear All. Я потихоньку изучаю программирование под андроид и вот пришло время думать над такой задачей - а как вообще организовывается...

Клиент и сервер - Программирование Android
У меня есть TCP клиент андроид и сервер Qt. На сервер все данные нормально приходят но на клиент ответ от сервера(текстовое сообщение) не...

Сервер и клиент - Программирование Android
Хочу написать простенький сервер, который передает с клиента, то есть с телефона, сообщение по нажатию на кнопку. Передает на сервер,...

Клиент-сервер - Программирование Android
Здравствуйте. Возникло желание создать клиент (андоид) / сервер на ПК (java). Принцип работы клиент сервера: 1. На сервере добавляю...

Клиент-сервер. Базы - Программирование Android
Здравствуйте. Поясните(нкаидайте ссылкон на инфу), пожалуйста, как организовать клиент-сервер на Android? Как передавать данные в базу и...

6
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
25.03.2013, 15:36 #2
Эх..... эмулятор не эмулирует работу WiFi и сети. попробуйте на реальном устройстве
чтобы проверить, у WifiManager-а есть метод isWifiEnabled().
1
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
25.03.2013, 23:31  [ТС] #3
попробовала на телефоне, пока что без результата, ноут и телефон подключены к одной wi-fi сети.
тогда стоит прописать iswifienabled()?
и еще парочку вопросов:
1) если на ноуте сделать access point и к нему подключится это что-то изменит?
2) у клиента и сервера должны быть одинаковые номера портов?
3) есть разница, cначала клиент запускать или сервер?
0
c4sp3r
0x5B4C322291BD52AE
92 / 92 / 5
Регистрация: 04.03.2013
Сообщений: 295
26.03.2013, 03:04 #4
А зачем использовать isWifiEnabled () если в устройстве включен wi-fi и работает маркет, браузер то ИМХО нет смысла в отладочных целях использовать данный метод.

1. Наврятли при условии что точка доступа правильно настроена а то вдруг там MAC фильтр включен и т.п.
2. Клиент должен подключаться к порту сервера, порт это как бы дверь куда стучится клиент и если она открыта то он входит и у них начинается разговор (с сервером).
3. Обычно сначала всегда сервер запускают так как при успешной инициализации он открывает порт и ждет когда к нему постучаться.
1
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
26.03.2013, 12:27 #5
метод isWifiEnabled() служить только для того, чтобы проверить включен wifi или нет. чтобы принудительно включить есть метод setWifiEnabled(true). все остальное вам ответил пользователь c4sp3r. могу еще добавить - проверьте пермишны в манифесте должно быть что то примерно такое
XML
1
2
3
4
5
6
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
поставьте try/cath и выводите сообщения об ошибках в логи так хоть станет понятней в чем проблема.
и кстати у вас строчка:
InetAddress local = InetAddress.getByName("127.0.0.1");
как я понял это должен быть адрес сервера. а он никак не может быть 127.0.0.1
0
letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
28.03.2013, 16:48  [ТС] #6
всем спасибо! все работает)
0
sirik2012
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 45
15.08.2013, 16:12 #7
Извините за некропостинг, но...
Сделал я клиент-сервер в виде: сервер на машине с Виндой (так же для теста сделал такой же на Arduino), а клиент на Android 4.1.2.
Запустил Ваш проект и у меня он просто падает на строке: serverSocket.receive(receivePacket);

Суть работы клиента такова: клиент отправляет простой запрос на сервер, сервер его принимает и шлет ответ, и когда клиент его принимает - он просто аварийно закрывается(

Пробовал поймать ошибку, но на элуляторе wi-fi не работает, а на устройстве никак не могу ее поймать, try, catch почему-то ее не ловят
Подскажите как такое может быть?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2013, 16:12
Привет! Вот еще темы с ответами:

Клиент-сервер (сокеты) - Программирование Android
Хочу тестировать клиент-серверное приложение на базе слкетов, но не знаю какой IP нужно указывать в клиентском приложении, которое потом...

Клиент-сервер (сокеты) - Программирование Android
Пытаюсь написать два приложения: первое запускается на ПК (написано на JAVA и оно же сервер), второе на Android (оно же клиент). Клиент...

Клиент - сервер протокол - Программирование Android
Всем привет. Я пытаюсь понять как и с помощью чего можно организовать клиент-серверное приложение. Гуглю вторую неделю, перечитал кучу...

Клиент-сервер для android - Программирование Android
Здравствуйте. Мне нужно сделать следующее:сервер с базой данных и клиенты на пк и android с помощью которых будет выполняться работа с бд....


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

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

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