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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Помогите передвинуть ImageView http://www.cyberforum.ru/android-dev/thread394017.html
В main.xml есть ImageView. Вот он: <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> Возникла задача программно его двигать....
Программирование Android Вывод уведомлений в главное окно приложения. (Многопоточность) Здраствуте. Если кто знает подскажите пожалуйста как в andoid выводить уведомления в главное окно программы (например в TextView). Смысл в том, что при наступлении некоторого события в потоке... http://www.cyberforum.ru/android-dev/thread393411.html
КАЛЬУЛЯТОР Программирование Android
Здравствуйте, помогите пожалуйста с написанием калькулятора выполняющего простые операции (+,-,*,/,=), ибо сам языка не знаю, а могу только кнопки на форме расположить. Спасибо Добавлено через 5...
Программирование Android Завершение предыдущего активити (удаление из стека)
товарищи, подскажите способы завершения предыдущего активити в стеке, чтобы по нажатию клавиши "назад" из последующего я уже не возобновлял предыдущее?? вроде раньше использовал простой finish()...
Программирование Android Android OpenGL 1.1 http://www.cyberforum.ru/android-dev/thread387131.html
Пытаюсь вот так нарисовать треугольник,но ничего не получается.В чём дело.смотрел несколько примеров,вроде всё идентично. package plane.namespace; import java.nio.ByteBuffer; import...
Программирование Android IntelliJ IDEA не запускает мою программу Проблема в следующем: создаю примитивную программу, взятую с примера: package com.example; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class... подробнее

Показать сообщение отдельно
flatgad
geJI<|>eP
186 / 186 / 1
Регистрация: 22.07.2010
Сообщений: 733
05.07.2013, 10:25
Цитата Сообщение от evgenys Посмотреть сообщение
спасибо за ваш пример UDP всё работает, но возникло несколько глупых вопросов Android только начал учить

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

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

3. может есть у кого рабочий пример для сокетов по TCP?
1. Нужно в главной активити на событие Ondestroy сделать sock.close(); и соответственно завершить поток приема данных.

2. Будет почему нет. Но одно но у сервера должен быть статический ай-пи. Но для работы в интернете я бы посоветовал TCP. Смотря какие цели конечные.

3. По TCP работа такая же как и для UDP только использовать нужно Serversocket - для сервера и Socket для клиента.

Вот мои исходники над которыми сейчас работаю но это ява но на андроиде должно тоже работать :

класс сервера : (получаю набор байтов но их можно и в string перевести в зависимости что тебе надо)

Кликните здесь для просмотра всего текста

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
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
 
public class IPAServer {
 
    private class ClientThread extends Thread {
 
        public ClientThread() {
        }
 
        @Override
        public void run() {
            try {
                mySocket = serverSocket.accept();
                while (!stop_server) {
                    InputStream is = mySocket.getInputStream();
                    int r = is.available();//тут у меня проблема так как для сокетов нельзя использовать available сейчас 
//борюсь как можно поправить. Моя проблема в том что я не знаю сколько байт принимаю от клиента. Если у тя свой ///протокол то можно все упростить если тебе интересно.
                    if (r != 0) {
                        MainFrame.StartIPACleint();
                        byte[] buf =new byte[r];
                        mySocket.getInputStream().read(buf);
                        IPAClient.SendByteToClient(buf);
                        MainFrame.SetTextLog("[S]IPA [" + String.valueOf(port)
                                + "] : " + bytesToHex(buf) + "\n");
                    }
                }
            } catch (IOException ex) {
                System.out.println(ex);
            }
        }
    }
    private int port;
    private ServerSocket serverSocket;
    private boolean stop_server = false;
    private ClientThread clientthread;
    private static Socket mySocket;
    final protected static char[] hexArray = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
 
    public IPAServer(int _port, String _ipadress) {
        try {
            this.port = _port;
            this.serverSocket = new ServerSocket(port, 0, InetAddress.getByName(_ipadress));
            clientthread = new ClientThread();
            clientthread.start();
        } catch (IOException ex) {
            System.out.println(ex);
        }
    }
 
    public void SendDataFromServer(String _data) {
        try {
            OutputStream os = mySocket.getOutputStream();
            os.write(_data.getBytes());
        } catch (Exception ex) {
            System.out.println(ex);
        }
    }
 
    public static void SendByteToServer(byte _buf[]) {
        OutputStream os;
        try {
            if (mySocket != null) {
                os = mySocket.getOutputStream();
                os.write(_buf);
            }
        } catch (Exception ex) {
            System.out.println(ex);
        }
    }
 
    public String bytesToHex(byte[] bytes) {
        char[] hexChars = new char[bytes.length * 2];
        int v;
        for (int j = 0; j < bytes.length; j++) {
            v = bytes[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }
        return new String(hexChars);
    }
}


класс клиента:
Кликните здесь для просмотра всего текста

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
import java.io.*;
import java.net.Socket;
 
public class IPAClient {
 
    private class DataListener extends Thread {
 
        public DataListener() {
        }
 
        public void run() {
            try {
                clSocket = new Socket(IPadress, port);
                while (!stoprun) {
                    InputStream is = clSocket.getInputStream();
                    int r = is.available();//Тут тоже available не канает. 
                    if (r > 0) {
                        byte[] buf = new byte[r];
                        clSocket.getInputStream().read(buf);
                        if (!OMLClient.getSock()) {
                            buf = ConvertByteBuffer(buf);
                        }
                        IPAServer.SendByteToServer(buf);
//Вывод сообщения в текстовое поле у андроида такого неу :) 
                        MainFrame.SetTextLog("[C]IPA [" + String.valueOf(port) + "] : " + bytesToHex(buf) + "\n");
                    }
                }
            } catch (Exception ex) {
                System.out.println(ex);
            }
        }
    }
    private int port;
    private String IPadress;
    private static Socket clSocket = null;
    private DataListener datalistener;
    public boolean stoprun = false;
    final protected static char[] hexArray = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
 
    public IPAClient(int _port, String _ipadress) {
        this.port = _port;
        this.IPadress = _ipadress;
        datalistener = new DataListener();
        datalistener.start();
    }
 
    public static boolean getSock() {
        if (clSocket != null) {
            return true;
        }
        return false;
    }
 
    public static void SendByteToClient(byte _buf[]) {
        OutputStream os;
        try {
            if (clSocket != null) {
                os = clSocket.getOutputStream();
                os.write(_buf);
            }
        } catch (Exception ex) {
            System.out.println(ex);
        }
    }
 
    public String bytesToHex(byte[] bytes) {
        char[] hexChars = new char[bytes.length * 2];
        int v;
        for (int j = 0; j < bytes.length; j++) {
            v = bytes[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }
        return new String(hexChars);
    }
 
    private byte[] ConvertByteBuffer(byte[] buff) {
        for (int i = 0; i < buff.length; i++) {
            if ((buff[i] == (byte) 0x0B) && (buff[i + 1] == (byte) 0xBB)) {
                buff[i] = (byte) 0x0F;
                buff[i + 1] = (byte) 0xA3;
                break;
            }
        }
        return buff;
    }
 
    public void StopClient() {
        stoprun = false;
    }
}


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