Java android клиент серверное приложение

Видео. Пишем полноценное клиент-сервер приложение под Android

Хочу поделиться с вами серией уроков, которые мы пишем на нашем канале. Цель данных уроков поделится своими знаниями в сфере Java/Android Development-а, показать как мы строим процесс разработки, и в итоге написать готовое приложение, которое будет общаться с сервером.

Внимание!
Данными уроками мы лишь показываем, то, как мы видим процесс разработки, и делимся лично своим опытом. Все что мы объясняем, является лишь нашим мнением и решением, которое может не сходится с вашим.

Идея

Чтобы сделать курс более понятным, мы решили не брать мегасложное приложение, тем самым сделав процесс более простым.

Немного подумав мы решили писать приложение которое бы напоминало нам о важных событиях, делах на текущий день, неделю, месяц или год.

Да, да, да! Мы знаем что таких приложений горы, но цель не создать мега уникальное и популярное приложение, а показать процесс его разработки.

Процесс приготовлений

Прежде чем приступить, мы продумали, что будем писать, как и даже накидали прототипы и макеты. После чего распланировали первый спринт в Youtrack. Таски иногда пополняются, но в на данный момент первый спринт выглядит так:

Также уже в процессе было создано макет приложения, которое мы планируем написать и весь этот процесс записать на видео:

Источник

Client-Server Programming in Android

Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project.

Step 2 − Add the following code to res/layout/activity_main.xml.

Step 3 − Add the following code to src/MainActivity.java

package com.server.myapplication.server; import android.annotation.SuppressLint; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.nio.ByteOrder; @SuppressLint("SetTextI18n") public class MainActivity extends AppCompatActivity < ServerSocket serverSocket; Thread Thread1 = null; TextView tvIP, tvPort; TextView tvMessages; EditText etMessage; Button btnSend; public static String SERVER_IP = ""; public static final int SERVER_PORT = 8080; String message; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvIP = findViewById(R.id.tvIP); tvPort = findViewById(R.id.tvPort); tvMessages = findViewById(R.id.tvMessages); etMessage = findViewById(R.id.etMessage); btnSend = findViewById(R.id.btnSend); try < SERVER_IP = getLocalIpAddress(); >catch (UnknownHostException e) < e.printStackTrace(); >Thread1 = new Thread(new Thread1()); Thread1.start(); btnSend.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View v) < message = etMessage.getText().toString().trim(); if (!message.isEmpty()) < new Thread(new Thread3(message)).start(); >> >); > private String getLocalIpAddress() throws UnknownHostException < WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); assert wifiManager ! = null; WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipInt = wifiInfo.getIpAddress(); return InetAddress.getByAddress(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(ipInt).array()).getHostAddress(); >private PrintWriter output; private BufferedReader input; class Thread1 implements Runnable < @Override public void run() < Socket socket; try < serverSocket = new ServerSocket(SERVER_PORT); runOnUiThread(new Runnable() < @Override public void run() < tvMessages.setText("Not connected"); tvIP.setText("IP: " + SERVER_IP); tvPort.setText("Port: " + String.valueOf(SERVER_PORT)); >>); try < socket = serverSocket.accept(); output = new PrintWriter(socket.getOutputStream()); input = new BufferedReader(new InputStreamReader(socket.getInputStream())); runOnUiThread(new Runnable() < @Override public void run() < tvMessages.setText("Connected
"); > >); new Thread(new Thread2()).start(); > catch (IOException e) < e.printStackTrace(); >> catch (IOException e) < e.printStackTrace(); >> > private class Thread2 implements Runnable < @Override public void run() < while (true) < try < final String message = input.readLine(); if (message ! = null) < runOnUiThread(new Runnable() < @Override public void run() < tvMessages.append("client:" + message + "
"); > >); > else < Thread1 = new Thread(new Thread1()); Thread1.start(); return; >> catch (IOException e) < e.printStackTrace(); >> > > class Thread3 implements Runnable < private String message; Thread3(String message) < this.message = message; >@Override public void run() < output.write(message); output.flush(); runOnUiThread(new Runnable() < @Override public void run() < tvMessages.append("server: " + message + "
"); etMessage.setText(""); > >); > > >

Step 4 − Add the following code to androidManifest.xml

Client

Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project.

Step 2 − Add the following code to res/layout/activity_main.xml.

Step 3 − Add the following code to res/layout/MainActivity.java.

package com.client.myapplication.client; import android.annotation.SuppressLint; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; @SuppressLint("SetTextI18n") public class MainActivity extends AppCompatActivity < Thread Thread1 = null; EditText etIP, etPort; TextView tvMessages; EditText etMessage; Button btnSend; String SERVER_IP; int SERVER_PORT; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); etIP = findViewById(R.id.etIP); etPort = findViewById(R.id.etPort); tvMessages = findViewById(R.id.tvMessages); etMessage = findViewById(R.id.etMessage); btnSend = findViewById(R.id.btnSend); Button btnConnect = findViewById(R.id.btnConnect); btnConnect.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View v) < tvMessages.setText(""); SERVER_IP = etIP.getText().toString().trim(); SERVER_PORT = Integer.parseInt(etPort.getText().toString().trim()); Thread1 = new Thread(new Thread1()); Thread1.start(); >>); btnSend.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View v) < String message = etMessage.getText().toString().trim(); if (!message.isEmpty()) < new Thread(new Thread3(message)).start(); >> >); > private PrintWriter output; private BufferedReader input; class Thread1 implements Runnable < @Override public void run() < Socket socket; try < socket = new Socket(SERVER_IP, SERVER_PORT); output = new PrintWriter(socket.getOutputStream()); input = new BufferedReader(new InputStreamReader(socket.getInputStream())); runOnUiThread(new Runnable() < @Override public void run() < tvMessages.setText("Connected
"); > >); new Thread(new Thread2()).start(); > catch (IOException e) < e.printStackTrace(); >> > class Thread2 implements Runnable < @Override public void run() < while (true) < try < final String message = input.readLine(); if (message ! = null) < runOnUiThread(new Runnable() < @Override public void run() < tvMessages.append("server: " + message + "
"); > >); > else < Thread1 = new Thread(new Thread1()); Thread1.start(); return; >> catch (IOException e) < e.printStackTrace(); >> > > class Thread3 implements Runnable < private String message; Thread3(String message) < this.message = message; >@Override public void run() < output.write(message); output.flush(); runOnUiThread(new Runnable() < @Override public void run() < tvMessages.append("client: " + message + "
"); etMessage.setText(""); > >); > > >

Step 4 − Add the following code to androidManifest.xml

Let’s try to run your both server and client application. I assume you have connected your actual Android Mobile device with your computer. To run the app from android studio, open one of your project’s activity files and click Run icon from the toolbar. Select your mobile device as an option and then check your mobile device which will display your default screen –

Server:-

Client:-

Server:-

Click here to download the project code

Источник

Читайте также:  Python tkinter круглые кнопки
Оцените статью