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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 120, средняя оценка - 4.97
artemkasablin
2 / 2 / 0
Регистрация: 02.02.2010
Сообщений: 118
#1

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

29.11.2011, 08:45. Просмотров 15961. Ответов 20
Метки нет (Все метки)

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

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

Socket AndroiD - Программирование Android
В общем хочу написать сокет (TCP клиент) на андрюху. http://myandroidsolutions.blogspot.ru/2012/07/android-tcp-connection-tutorial.html ...

Socket server over 3g - Программирование Android
Привет. Хотел программу написать, сервер сокет, но что то в сети 3g не работает. Через домашний роутер с wifi и проброс портов все...

Не создается Socket - Программирование Android
есть сервер на c#, но не получается законнектиться на него с приложения на Andriod private static final String SERVER_IP = "127.0.0.1"; ...

И снова здравствуй Socket - Программирование Android
Недавнюю проблему с сокетами я решил. теперь возникла другая, суть ее в сл. вот кусочек кода подключения к сокету m_host =...

Подключение через Socket - Программирование Android
Недавно начал изучать разработку под андроид и вот поставили задачу написать некий клиент, который должен коннектиЦа через сокет на...

20
flatgad
geJI<|>eP
186 / 186 / 1
Регистрация: 22.07.2010
Сообщений: 733
30.11.2011, 00:51 #2
Цитата Сообщение от artemkasablin Посмотреть сообщение
Как работать с сокетами на Android? Есть литература на эту тему?
литература не знаю но в интернете информации куча. Что тебя интересует?
1
artemkasablin
2 / 2 / 0
Регистрация: 02.02.2010
Сообщений: 118
30.11.2011, 03:00  [ТС] #3
Цитата Сообщение от flatgad Посмотреть сообщение
литература не знаю но в интернете информации куча. Что тебя интересует?
Мне нужно написать чат. Сервер на Delphi будет, точнее уже сделан. А клиент под Android.
0
flatgad
geJI<|>eP
186 / 186 / 1
Регистрация: 22.07.2010
Сообщений: 733
30.11.2011, 03:26 #4
Цитата Сообщение от artemkasablin Посмотреть сообщение
Мне нужно написать чат. Сервер на Delphi будет, точнее уже сделан. А клиент под Android.
хех я неделю назад таким занимался
0
artemkasablin
2 / 2 / 0
Регистрация: 02.02.2010
Сообщений: 118
30.11.2011, 15:06  [ТС] #5
Цитата Сообщение от flatgad Посмотреть сообщение
хех я неделю назад таким занимался
Помогите тогда пожалуйста с этим...
0
flatgad
geJI<|>eP
186 / 186 / 1
Регистрация: 22.07.2010
Сообщений: 733
30.11.2011, 19:22 #6
Цитата Сообщение от artemkasablin Посмотреть сообщение
Помогите тогда пожалуйста с этим...
Делал передачу через UDP на делфи программку думаю напишешь а вот для андроида. Предупреждаю код може с первого разу не запустится тогда смотреть ошибки и ещё одно я так и не научился передавать на виртуальную машину пришлось тестить на реальном устройстве подключенным по вайфай к компьютеру или роутеру. И по поводу портов вроде у андроида свободные порты свыше 5000 я уже не помню какой я задавал тут тоже могут возникнуть проблемы. И вот держи проект может чем поможет UDP.rar. Вроде все если что пиши.

AndroidManifest не забываем :

XML
1
2
3
4
    <uses-permission android:name="android.permission.INTERNET">  
    </uses-permission>  
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE">  
    </uses-permission>
Сам код java :
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
public void onCreate(Bundle  savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        new Thread(new server()).start();
        try {
            Thread.sleep(500);
        }catch (InterruptedException e){}
    }
 
 
public void send_btn(View v){
    try
    {
        InetAddress serv_addr= '192.168.0.1';
        int port= 1245;
        DatagramSocket sock = new DatagramSocket();
        byte [] buf = ("c: Hello from android").getBytes();
        DatagramPacket pack= new DatagramPacket(buf, buf.length,serv_addr,port);
        sock.send(pack);
        sock.close();
        for (int i=0; i<buf.length;i++) buf[i]=0;
    }
    catch (Exception e){
        Log.d("UDP", "Error: "+e);
    }
    }
 
 
public class server implements Runnable{
        @Override
        public void run () {
            try{
                WifiManager wifiManager=(WifiManager)getSystemService(WIFI_SERVICE);
                WifiInfo wifiinfo= wifiManager.getConnectionInfo();
                int ip_adress=wifiinfo.getIpAddress();
                String newip= String.format("%d.%d.%d.%d", (ip_adress & 0xff),
                        (ip_adress>>8 & 0xff),
                        (ip_adress>>16 & 0xff),
                        (ip_adress>>24 & 0xff));
                int port=1254;//Не помню но вроде как должно быть выше 5000 
                ip_s.setText(newip);
                port_s.setText(Integer.toString(port));
                mess.append("Set port: "+Integer.toString(port)+"\n");
                InetAddress serv_address = InetAddress.getByName(newip);
                DatagramSocket serversocket = new DatagramSocket(port,serv_address);
                mess.append("Create socket \n");
                byte [] buf = new byte[17];     
                while(true) {
                    DatagramPacket packet= new DatagramPacket(buf, buf.length);
                    serversocket.receive(packet);
                    result_mess=new String(packet.getData(),0,packet.getData().length);
                    mess.post(new Runnable() {
                        @Override
                        public void run() {
                            mess.append("Create datagramPacket \n");
                            mess.append("Wait for packet ....\n");
                            mess.append(result_mess);
                        }
                    });
                    for (int i=0;i<buf.length;i++) buf[i]=0;
                }
                }
            catch (Exception e){
                mess.append("Error: "+e);
            }
        }
    }
}
1
artemkasablin
2 / 2 / 0
Регистрация: 02.02.2010
Сообщений: 118
01.12.2011, 05:12  [ТС] #7
Цитата Сообщение от flatgad Посмотреть сообщение
Делал передачу через UDP на делфи программку думаю напишешь а вот для андроида. Предупреждаю код може с первого разу не запустится тогда смотреть ошибки и ещё одно я так и не научился передавать на виртуальную машину пришлось тестить на реальном устройстве подключенным по вайфай к компьютеру или роутеру. И по поводу портов вроде у андроида свободные порты свыше 5000 я уже не помню какой я задавал тут тоже могут возникнуть проблемы. И вот держи проект может чем поможет Вложение 110265. Вроде все если что пиши.

AndroidManifest не забываем :

XML
1
2
3
4
    <uses-permission android:name="android.permission.INTERNET">  
    </uses-permission>  
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE">  
    </uses-permission>
Сам код java :
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
public void onCreate(Bundle  savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        new Thread(new server()).start();
        try {
            Thread.sleep(500);
        }catch (InterruptedException e){}
    }
 
 
public void send_btn(View v){
    try
    {
        InetAddress serv_addr= '192.168.0.1';
        int port= 1245;
        DatagramSocket sock = new DatagramSocket();
        byte [] buf = ("c: Hello from android").getBytes();
        DatagramPacket pack= new DatagramPacket(buf, buf.length,serv_addr,port);
        sock.send(pack);
        sock.close();
        for (int i=0; i<buf.length;i++) buf[i]=0;
    }
    catch (Exception e){
        Log.d("UDP", "Error: "+e);
    }
    }
 
 
public class server implements Runnable{
        @Override
        public void run () {
            try{
                WifiManager wifiManager=(WifiManager)getSystemService(WIFI_SERVICE);
                WifiInfo wifiinfo= wifiManager.getConnectionInfo();
                int ip_adress=wifiinfo.getIpAddress();
                String newip= String.format("%d.%d.%d.%d", (ip_adress & 0xff),
                        (ip_adress>>8 & 0xff),
                        (ip_adress>>16 & 0xff),
                        (ip_adress>>24 & 0xff));
                int port=1254;//Не помню но вроде как должно быть выше 5000 
                ip_s.setText(newip);
                port_s.setText(Integer.toString(port));
                mess.append("Set port: "+Integer.toString(port)+"\n");
                InetAddress serv_address = InetAddress.getByName(newip);
                DatagramSocket serversocket = new DatagramSocket(port,serv_address);
                mess.append("Create socket \n");
                byte [] buf = new byte[17];     
                while(true) {
                    DatagramPacket packet= new DatagramPacket(buf, buf.length);
                    serversocket.receive(packet);
                    result_mess=new String(packet.getData(),0,packet.getData().length);
                    mess.post(new Runnable() {
                        @Override
                        public void run() {
                            mess.append("Create datagramPacket \n");
                            mess.append("Wait for packet ....\n");
                            mess.append(result_mess);
                        }
                    });
                    for (int i=0;i<buf.length;i++) buf[i]=0;
                }
                }
            catch (Exception e){
                mess.append("Error: "+e);
            }
        }
    }
}
Почему с виртуальной машине на сервер delphi отправляется не сообщение а прописанное "Привет с андроида" пробовал поменять на (EditText)findViewById(R.id.editText3) не получилось почему то.
0
flatgad
geJI<|>eP
186 / 186 / 1
Регистрация: 22.07.2010
Сообщений: 733
01.12.2011, 12:09 #8
Цитата Сообщение от artemkasablin Посмотреть сообщение
Почему с виртуальной машине на сервер delphi отправляется не сообщение а прописанное "Привет с андроида" пробовал поменять на (EditText)findViewById(R.id.editText3) не получилось почему то.
код покажи! должно отправляться .
0
artemkasablin
2 / 2 / 0
Регистрация: 02.02.2010
Сообщений: 118
01.12.2011, 17:00  [ТС] #9
Цитата Сообщение от flatgad Посмотреть сообщение
код покажи! должно отправляться .
да я пока что ваш проект изучаю
0
flatgad
geJI<|>eP
186 / 186 / 1
Регистрация: 22.07.2010
Сообщений: 733
01.12.2011, 17:11 #10
Цитата Сообщение от artemkasablin Посмотреть сообщение
да я пока что ваш проект изучаю
Java
1
2
3
4
5
6
7
8
edit1=(EditText)findViewById(R.id.editText3)
....
String mess=edit1.gettext();
DatagramSocket sock = new DatagramSocket();
byte [] buf = (mess).getBytes();
DatagramPacket pack= new DatagramPacket(buf, buf.length,serv_addr,port);
sock.send(pack);
sock.close();
Должно отправить полюбому
0
artemkasablin
2 / 2 / 0
Регистрация: 02.02.2010
Сообщений: 118
03.12.2011, 12:39  [ТС] #11
Цитата Сообщение от flatgad Посмотреть сообщение
Java
1
2
3
4
5
6
7
8
edit1=(EditText)findViewById(R.id.editText3)
....
String mess=edit1.gettext();
DatagramSocket sock = new DatagramSocket();
byte [] buf = (mess).getBytes();
DatagramPacket pack= new DatagramPacket(buf, buf.length,serv_addr,port);
sock.send(pack);
sock.close();
Должно отправить полюбому
вот когда вместо mess написано "******" тогда отправляет эту строку, обрезая первый симовол.
0
oleg00gop
0 / 0 / 0
Регистрация: 20.04.2012
Сообщений: 1
23.04.2012, 21:18 #12
Все работало до перехода на софт 4.0.3.

Что не делаю по команде send всегда выдает android.os.NetworkOnMainThreadException.

Кто знает как бароться подскажите плиз!!!!
0
Maksim_m
0 / 0 / 0
Регистрация: 29.03.2016
11.09.2012, 18:37 #13
Не могли бы вы выложить исходник. Очень буду благодарен
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
11.09.2012, 18:55 #14
http://developer.android.com/referen...Exception.html

The exception that is thrown when an application attempts to perform a networking operation on its main thread.

This is only thrown for applications targeting the Honeycomb SDK or higher. Applications targeting earlier SDK versions are allowed to do networking on their main event loop threads, but it's heavily discouraged.
1
evgenys
0 / 0 / 0
Регистрация: 21.07.2015
05.07.2013, 02:58 #15
спасибо за ваш пример UDP всё работает, но возникло несколько глупых вопросов Android только начал учить

1. если экран потухнет или если апу запустить заново сокет для прослушивания заново не откроется так как занят порт, как закрыть сокет (убить объект server)? думается это должно происходить по событию activity в методе onDestroy() но как написать не понимаю

2. будет ли работать такая прога с сервером в интернете (в двух направлениях), я написал серверную часть на php и в локальной сети между адресами 192.168.1.1 и 192.168.1.3 всё круто работает, но в инет конектица она не захотела хотя хостер вроде разрешает сокеты, может нужен выделеный сервер но у меня его нет.

3. может есть у кого рабочий пример для сокетов по TCP?
0
05.07.2013, 02:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2013, 02:58
Привет! Вот еще темы с ответами:

Сеть через Socket - Программирование Android
Есть программа (клиент), которая должна подключить к серверу, а он передаст ip других серверов и вообщем нужно иметь несколько подключений...

Задать IP для Socket - Программирование Android
Добрый день подскажите как реализовать возможность ввода IP адреса для открытия Socketa. Планируется простой TCP клиент. Main активитии...

Socket догрузка файла - Программирование Android
java.lang.ArrayIndexOutOfBoundsException: length=1024; regionStart=20000; regionLength=1024 //f_s - сколько было закачено байт ...

TCP Socket Client - Программирование Android
Всем доброго времени суток. Пытаюсь открыть сокет между Android Client и сервером под виндой (когда то написал на билде, использую в...


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

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

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