Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 1
Регистрация: 01.11.2008
Сообщений: 82

Client-server app Android - pc. Готовое решение, осталось долатать

26.12.2017, 17:48. Показов 528. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Искал, думаю, как и все, "на просторах интернета", как сделать простое клиент - серверное приложение - "Минимум кода - максимум пользы". Естественно информации море, но для новичка обработать такую кучу - это, конечно, очень полезно, но не все ответы в последствии не порождают вопросы. Первое с чего начал я, т.к. клиент - сервер на консоле проще написать, так это сделал все на одной машине, естественно с одинаковым 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
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
 
public class MyServer {
    private static ServerSocket ss;
    private static Socket s;
    private static BufferedReader br;
    private static InputStreamReader isr;
    private static String message = "";
 
    public static void main(String[] args) {
        try {
            while (true) {
                ss = new ServerSocket(5000);
                System.out.println("Server running at port 5000");
                s = ss.accept();
                isr = new InputStreamReader(s.getInputStream());
                br = new BufferedReader(isr);
                message = br.readLine();
                System.out.println(message);
                System.out.println(s.getInetAddress().getHostAddress());
                isr.close();
                br.close();
                ss.close();
                s.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
клиент:
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
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
 
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class MainActivity extends Activity {
    EditText textOut;
    TextView textIn;
    private static Socket s;
    private static PrintWriter printWriter;
    private static String message = "";
    private static String ip = "192.168.0.26"; // здесь пишите ip, принадлежащий машине, где установлен сервер (win+r -> cmd ->ipconfig)
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_main );
        textOut = findViewById( R.id.textout );
        Button buttonSend = findViewById( R.id.send );
        textIn = findViewById( R.id.textin );
        buttonSend.setOnClickListener( buttonSendOnClickListener );
    }
 
    Button.OnClickListener buttonSendOnClickListener = new Button.OnClickListener() {
        //@Override
        public void onClick(View arg0) {
            message = textOut.getText().toString();
            myTask mt = new myTask();
            mt.execute();
        }
    };
 
    class myTask extends AsyncTask<Void, Void, Void> {
        @Override
        protected Void doInBackground(Void... voids) {
            try {
                s = new Socket( ip, 5000 );
                printWriter = new PrintWriter( s.getOutputStream() );
                printWriter.write( message );
                printWriter.flush();
                printWriter.close();
                s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
}
клиентская форма у каждого может быть своя - у меня своя. Button, EditText, TextView.
На данном этапе TextView даже не нужен, он предполагался для отображения отклика от сервера.
Это все было для только начинающих программистов.

Теперь хотелось бы разобраться, как мне получить от сервера ответ. По идее нужно обменяться классами и поменять номер порта и вуаля, но нет.
Т.е.
вот код клиента на компе:
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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class client {
    private static Socket s;
    private static Socket sIn;
    private static PrintWriter printWriter;
    private static String message = "";
    private static String ip = "192.168.0.26";
    private static BufferedReader br;
    private static InputStreamReader isr;
    private static ServerSocket ss;
    /**
     * Called when the activity is first created.
     */
    public static void main(String[] args) {
            myTask mt = new myTask();
            mt.run();
            myIn mi = new myIn();
            mi.run();
    }
    private static class myTask extends Thread{
        @Override
        public void run() {
            try {
                message="Knock-Knock";
                s = new Socket( ip, 5000 );
                printWriter = new PrintWriter( s.getOutputStream() );
                printWriter.write( message );
                printWriter.flush();
                printWriter.close();
                s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }private static class myIn extends Thread{
        @Override
        public void run() {
            try {
                //while (true) {
                    ss = new ServerSocket(6000);
                    System.out.println("Server running at port 6000");
                    sIn = ss.accept();
                    isr = new InputStreamReader(sIn.getInputStream());
                    br = new BufferedReader(isr);
                    message = br.readLine();
                    System.out.println(message);
                    isr.close();
                    br.close();
                    ss.close();
                    sIn.close();
                //}
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
И он отлично ладит с сервером:
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
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
 
public class MyServer {
    private static ServerSocket ss;
    private static Socket s;
    private static Socket sOut;
    private static BufferedReader br;
    private static InputStreamReader isr;
    private static String message="";
    private static String servMessage="";
    private static PrintWriter printWriter;
    private static String ip = "192.168.0.26";
    public static void main(String[] args) {
        try {
            while (true) {
                ss = new ServerSocket(5000);
                System.out.println("Server running at port 5000");
                s = ss.accept();
                isr = new InputStreamReader(s.getInputStream());
                br = new BufferedReader(isr);
                message = br.readLine();
                System.out.println(message );
                                isr.close();
                br.close();
                ss.close();
                s.close();
                servMessage = "Принял: " + message;
                myTask mt = new myTask();
                mt.run();
          }
        } catch (IOException e) {
            e.printStackTrace();
        }
 
 
    }
    private static class myTask extends Thread{
        @Override
        public void run() {
            try {
                sOut = new Socket( ip, 6000 );                                       // метка ошибки: at MyServer$myTask.run(MyServer.java:44)
                printWriter = new PrintWriter( sOut.getOutputStream() );
                printWriter.write( servMessage );
                printWriter.flush();
                printWriter.close();
                sOut.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
Но!!! Точно тоже самое на андроиде:
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
package com.example.spiri.client;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
 
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class MainActivity extends Activity {
    EditText textOut;
    TextView textIn;
    private static Socket s;
    private static Socket sIn;
    private static PrintWriter printWriter;
    private static String message = "";
    private static String ip = "192.168.0.26";
    private static BufferedReader br;
    private static InputStreamReader isr;
    private static ServerSocket ss;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_main );
        textOut = findViewById( R.id.textout );
        Button buttonSend = findViewById( R.id.send );
        textIn = findViewById( R.id.textin );
        buttonSend.setOnClickListener( buttonSendOnClickListener );
    }
 
    Button.OnClickListener buttonSendOnClickListener = new Button.OnClickListener() {
        //@Override
        public void onClick(View arg0) {
            message = textOut.getText().toString();
            myTask mt = new myTask();
            mt.execute();
            myIn mi = new myIn();
            mi.execute();
        }
    };
    private static class myIn extends AsyncTask<Void, Void, Void> {
        @Override
        protected Void doInBackground(Void... voids) {
            try {
                //while (true) {
                ss = new ServerSocket(6000);
                System.out.println("Server running at port 6000");
                sIn = ss.accept();
                isr = new InputStreamReader(sIn.getInputStream());
                br = new BufferedReader(isr);
                message = br.readLine();
                System.out.println(message);
                isr.close();
                br.close();
                ss.close();
                sIn.close();
                //}
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    class myTask extends AsyncTask<Void, Void, Void> {
        @Override
        protected Void doInBackground(Void... voids) {
            try {
                s = new Socket( ip, 5000 );
                printWriter = new PrintWriter( s.getOutputStream() );
                printWriter.write( message );
                printWriter.flush();
                printWriter.close();
                s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
}
... ну никак не хочет работать!
Вопрос: на стороне сервера вылезает вот это:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Server running at port 5000
тук-тук
Server running at port 5000
java.net.ConnectException: Connection refused: connect
    at java.base/java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.base/java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:400)
    at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:243)
    at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:225)
    at java.base/java.net.PlainSocketImpl.connect(PlainSocketImpl.java:148)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:402)
    at java.base/java.net.Socket.connect(Socket.java:591)
    at java.base/java.net.Socket.connect(Socket.java:540)
    at java.base/java.net.Socket.<init>(Socket.java:436)
    at java.base/java.net.Socket.<init>(Socket.java:213)
    at MyServer$myTask.run(MyServer.java:44)
    at MyServer.main(MyServer.java:32)
Подскажите, что ему ещё надо?

Добавлено через 3 часа 16 минут
дальше - круче
указав в приложении внешний статический адрес и поколдовав с модемом, смог с эмулятора отправить запрос на сервер. А с реального устройства нет!!! Что за...? Подскажите
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.12.2017, 17:48
Ответы с готовыми решениями:

Android, client-server
Здравствуйте, раньше писал, что делаю приложение на диплом, что-то похожие на google maps, сейчас возник вопрос об авторизацие. ...

Android client <-Wi FI-> PC server
Всем привет. Очень хочу реализовать такую штуку. Значит надо отправлять хотяб 1 байт с андроида на пк через WI Fi На ПК вполне знаком...

Client(android) - Server (PC) - Delphi
Здравствуйте. Подскажите как можно реализовать Client(android) - Server (PC) - Delphi , требуется отправить сообщение с телефона и...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.12.2017, 17:48
Помогаю со студенческими работами здесь

client/server для android phone <-> pc на java
Написал клиент/сервер на java для передачи сообщений из телефона в комп. Клиент на телефон samsung galaxy fit gt-s5670 с Android 2.2.1,...

Client-server app Android - pc. Готовое решение, осталось долатать
Здравствуйте. Искал, думаю, как и все, &quot;на просторах интернета&quot;, как сделать простое клиент - серверное приложение - &quot;Минимум кода -...

Готовое решение "User Datagram Protocol Client" (UDP Client или Мини чат)
Может быть кому пригодится:)

Client(android) - Server (PC)
Здравствуйте. Помогите мне создать клиент-сервер приложение. Примерное описание приложения: хочу через телефон добавить запись на БД...

Client(Android) - Server(Delphi)
Необходимо чтобы клиент на Android передавал данные на сервер ПК. Проблема в том что вместо текста в поле memo пишется всегда...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru