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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
андрейка12
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 9
#1

Клиент-серверное приложение - Программирование Android

04.03.2014, 17:38. Просмотров 2255. Ответов 5
Метки нет (Все метки)

Всем привет,

Пытаюсь написать клиент-серверное приложение для android. Логика следующая: android устройство подключается к серверу, пишем сообщения и отправляем. Сервер просто печатает.

Проблема: запускаю клиент и вылетает при подключении.

Сам компьютер подключён к wi-fi роутеру. Такое чувство, что пытаюсь подключится к неправильному ip.
Может, кто-нибудь что-нибудь подскажет?

Сервер:

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
public class Server extends Thread
{
    // Create the server socket channel
    protected ServerSocketChannel server;
    protected java.nio.channels.Selector selector;
 
    
    public Server()
    {
        try
        {
            server = ServerSocketChannel.open();
            // nonblocking I/O
            server.configureBlocking(false);
            server.socket().bind(new java.net.InetSocketAddress("192.168.0.28",5000));
            selector = java.nio.channels.Selector.open();
            // Recording server to selector (type OP_ACCEPT)
            server.register(selector,SelectionKey.OP_ACCEPT);
            server.register(selector,SelectionKey.OP_ACCEPT);
            System.out.println(server.socket().getInetAddress().getHostAddress());
        }
        catch (IOException e)
        {
            fail(e, "Could not start server.");
        }
        System.out.println("Server is running . . .");
        this.start();
    }
    
    
    public static void fail(Exception e, String str)
    {
        System.out.println(str + "." + e);
    }
    
    public void run()
    {
        try
        {
            while (true)
            {
                // Waiting for events
                selector.select();
                // Get keys
                Set keys = selector.selectedKeys();
                Iterator i = keys.iterator();
 
                 // For each keys...
                while(i.hasNext()) 
                {
                    SelectionKey key = (SelectionKey) i.next();
                    // Remove the current key
                    i.remove();
                    // if isAccetable = true
                    // then a client required a connection
                    if (key.isAcceptable()) 
                    {
                          // get client socket channel
                          SocketChannel client = server.accept();
                          // Non Blocking I/O
                          client.configureBlocking(false);
                          // recording to the selector (reading)
                          client.register(selector, SelectionKey.OP_READ);
                          Connection con = new Connection(client.socket());
                    }
                }
            }
        }
        catch (IOException e)
        {
            fail(e, "Not listening");
        }
    }
    
    
    public static void main(String args[])
    {
        new Server();
    }
}
 
class Connection extends Thread 
{
    /* Declare the variables */
    protected Socket clientSocket;
    protected ObjectInputStream fromClient;
    protected ObjectOutputStream toClient;
    
    
    public Connection(Socket client)
    {
        clientSocket = client;
        try
        {
            fromClient = new ObjectInputStream(clientSocket.getInputStream()); //
            toClient = new ObjectOutputStream(clientSocket.getOutputStream()); //
        }
        catch (IOException e)
        {
            try
            {
                clientSocket.close();
            }
            catch (IOException exeption)
            {
                System.err.println("Unable to set up streams " + exeption);
                return;
            }
        }
        /* Start the thread */
        this.start();
    }
    
    public void run()
    {
        String message;
        try
        {
            while (true)
            {
                message = fromClient.readLine();
                /* Завершить соединение, когда Bye вводится как login */
                System.out.println(clientSocket.getInetAddress().getHostName()+ ": " + message);
 
            }
        } 
        catch (IOException e)
        {
            System.out.println(e);
        }
        finally
        {
            try
            {
                clientSocket.close();
            }
            catch (IOException 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
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
public class MainActivity extends Activity implements OnClickListener{
 
    private OutputStream outputStream;
    private EditText message;
    private Button button;
    private Button button_disconect;
    private final String host="192.168.0.28";
    private final int port=5000;
    private byte buffer[] = new byte[1024];
    protected Socket socket;
    
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);     
        message = (EditText)findViewById(R.id.fieldForMessage);
        button = (Button)findViewById(R.id.button);
        button_disconect = (Button)findViewById(R.id.disconect_button);
        socket = new Socket();
        
        try {
            socket.bind(null);
            socket.connect((new InetSocketAddress(host,port)), 500);
            socket.setKeepAlive(true);
 
            /**
             * Create a byte stream from a JPEG file and pipe it to the output stream
             * of the socket. This data will be retrieved by the server device.
             */
            outputStream = socket.getOutputStream();
            
        }
        
        
        
        catch (FileNotFoundException e) 
        {
            //catch logic
        }
        catch (IOException e)
        {
            //catch logic
        }
        
        
        
        /**
         * Clean up any open sockets when done
         * transferring or if an exception occurred.
         */
    }
 
    @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;
    }
    
    @Override
    public void onClick(View v) {
        switch(v.getId()) {
        case R.id.button:
            String str = message.getText().toString();
            int len = str.length();
            buffer = str.getBytes();
            if (len != 0)
            {
                try 
                {
                    outputStream.write(buffer, 0, len);
                } 
                catch (IOException e)
                {
                }
            
            }
        case R.id.disconect_button:     
            if (socket != null) {
                if (socket.isConnected()) {
                    try {
                            socket.close();
                        } catch (IOException e) {
                            //catch logic
                        }
                    }
                }
        }
    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2014, 17:38     Клиент-серверное приложение
Посмотрите здесь:

Клиент-серверное приложение - Программирование Android
Всем привет!) Возникла такая проблема есть серверное приложение(на Java) и есть к нему клиент(так же на Java). Однако при написании...

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

Клиент-серверное приложение - Программирование Android
Идея такова: Мы со смартфона перехватываем handshake от какой-то wifi сети (это происходит с помощью другого приложения) и передаем его на...

Клиент-серверное приложение android - Программирование Android
Каким образом можно создать приложение для передачи данных через интернет? Одно устройство выступает в роли сервера, а второе - клиент.

Клиент-серверное приложение android - Программирование Android
Ребят, такая задача: Необходимо, чтобы пользователь1 мог отправлять сообщение со своего приложения на телефоне/компьютере на другое...

Простое Клиент-Серверное приложение - Программирование Android
Добрый день, начал осваивать андройд, и застопорился на некоторых моментах, вернее, Оно почему-то не работает, просто не коннектит к...

Клиент-серверное приложение с чатом - Программирование Android
Добрый вечер! Собираюсь писать многопользовательское клиент-серверное приложения для Android. Проблема в том, что я не знаю как...

Клиент-серверное приложение. Не могу получить ip - Программирование Android
private String getIpAddress() { String ip = ""; try { Enumeration<NetworkInterface> enumNetworkInterfaces...

Клиент-серверное приложение - посоветуйте архитектуру - Программирование Android
Всем доброго времени суток. Пишу клиент-серверное приложение с нуля, поэтому вопросов куча) Это уже вторая тема (первая...

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

Своеобразное приложение по типу клиент-сервер - Программирование Android
Доброго времени суток. Каким образом можно организовать приложение, которое предназначено, к примеру, для отправки запроса к...

Переделать приложение для Андроид в приложение для ПК - Программирование Android
Встретилась очень мне нужное приложение для анроид систем. К моему сожалению подобных программ нет для систем Windows. Реально ли такие...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.03.2014, 17:49     Клиент-серверное приложение #2
Цитата Сообщение от андрейка12 Посмотреть сообщение
запускаю клиент и вылетает при подключении.
лог ошибки приложить забыли.
андрейка12
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 9
04.03.2014, 18:02  [ТС]     Клиент-серверное приложение #3
Лог:

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
03-04 18:01:04.195: E/AndroidRuntime(1469): FATAL EXCEPTION: main
03-04 18:01:04.195: E/AndroidRuntime(1469): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.appclient/com.example.appclient.MainActivity}: android.os.NetworkOnMainThreadException
03-04 18:01:04.195: E/AndroidRuntime(1469):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at android.app.ActivityThread.access$700(ActivityThread.java:159)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at android.os.Looper.loop(Looper.java:176)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at android.app.ActivityThread.main(ActivityThread.java:5419)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at java.lang.reflect.Method.invokeNative(Native Method)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at java.lang.reflect.Method.invoke(Method.java:525)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at dalvik.system.NativeStart.main(Native Method)
03-04 18:01:04.195: E/AndroidRuntime(1469): Caused by: android.os.NetworkOnMainThreadException
03-04 18:01:04.195: E/AndroidRuntime(1469):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1144)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at java.net.InetAddress.getLocalHost(InetAddress.java:365)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:188)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at java.net.Socket.connect(Socket.java:842)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at com.example.appclient.MainActivity.onCreate(MainActivity.java:43)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at android.app.Activity.performCreate(Activity.java:5372)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
03-04 18:01:04.195: E/AndroidRuntime(1469):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)
03-04 18:01:04.195: E/AndroidRuntime(1469):     ... 11 more
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.03.2014, 18:09     Клиент-серверное приложение #4
android.os.NetworkOnMainThreadException
Java
1
socket = new Socket();
так нельзя делать в основном потоке.

http://habrahabr.ru/post/145092/
http://habrahabr.ru/post/124484/
андрейка12
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 9
04.03.2014, 18:48  [ТС]     Клиент-серверное приложение #5
А можете выложить пример, как лучше сделать?
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
04.03.2014, 18:54     Клиент-серверное приложение #6
андрейка12, написать я не могу, но могу дать общие рекомендации.
Если соединение с сервером должно быть постоянным, то лучше всего создать сервис, в котором клиент будет обмениваться данными с сервером, коннект и дисконнект будут там же.
Пример можно найти здесь:
http://startandroid.ru/ru/uroki/vse-...prostoj-primer

Если соединение "одноразовое", т.е. клиент соединился, отправил данные, получил ответ и отключился, то лучше использовать AsyncTask или простой Thread.
Yandex
Объявления
04.03.2014, 18:54     Клиент-серверное приложение
Ответ Создать тему
Опции темы

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