Lekce 12 - Komunikace Klient/Server - Server
V minulé lekci, Síť v Javě - Klient/Server - Obousměrná komunikace, jsme si vytvořili druhou aplikaci typu klient-server s obousměrnou komunikací a obsluhou více klientů najednou.
Zdravím vás u tutoriálů, ve kterých si ukážeme, jak vytvořit jednoduchou komunikaci Klient/Server. Já budu používat jako IDE Intellij Idea, ale vy můžete používat jakékoliv jiné, jako Eclipse nebo Netbeans. Nebude to nic těžkého, takže nemějte strach.
Co budeme potřebovat?
Budeme si muset vytvořit server, který bude naslouchat nějakému portu a k tomu si vytvoříme klienta, který bude odesílat data na ten určitý port, kterému server naslouchá. Využijeme k tomu TCP protokol. Kromě TCP protokolu existuje ještě UDP protokol, ale ten není tak spolehlivý.
A teď už k samotnému serveru
Jako první si vytvoříme server. Klienta uděláme v dalším dílu.
Vytvoříme si nový projekt, který si můžete pojmenovat podle libosti, já
si ho pojmenuji Sockety. V projektu si vytvořte třídu Server s metodou
main()
.

Ještě než začneme psát program, tak si do třídy naimportujte tyto balíčky:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket;
Nejprve si vytvoříme v metodě main()
instanci třídy Server
jménem server. Pak si naší třídě přidáme privátní atribut jménem
serverSocket
typu ServerSocket
a vytvoříme si
konstruktor. V konstruktoru si inicializujeme serverSocket
a jako
argument mu předáme port, kterému bude server naslouchat, v mém případě
to bude port 8080. Za inicializaci si přidáme výpis, že byl
server úspěšně spuštěn. Inicializaci obalíme do bloku
try – catch
:
public Server() { try { this.serverSocket = new ServerSocket(8080); System.out.println("Spuštění serveru proběhlo úspěšně."); } catch (IOException e) { e.printStackTrace(); } }
V tomtéž try- catch
bloku si vytvoříme
socket pro klienta, jménem clientSocket
,
zavoláním metody accept()
na serverSocketu. Jelikož je metoda
accept()
blokovací, tak nám zastaví běh programu, dokud se
nepřipojí klient. Díky tomu si můžeme pod vytvořením clientSocketu nechat
vypsat zprávu, že se klient připojil. Ve zprávě si vypíšeme i adresu, ze
které se klient připojil. Tu získáme metodou getInnetAdress()
,
která vrací objekt InnetAdress
, ze kterého metodou
getHostAdress()
získáme adresu klienta:
Socket clientSocket = this.serverSocket.accept(); System.out.println("Klient se připojil z adresy " + clientSocket.getInetAddress().getHostAddress() + ".");
Vytvoříme si BufferedReader
s názvem in, kterému předáme
vstupní proud ze socketu klienta zavoláním metody
getInputStream()
na clientSocketu:
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
Nyní si vytvoříme nekonečný while
cyklus. V cyklu si
vytvoříme proměnnou typu String
s názvem temp
, do
které uložíme data od klienta zavoláním metody readLine()
na
BufferedReaderu. Nyní zbývá už jen vypsat zprávu od klienta, které je
uložená v proměnné temp
:
while (true) { String temp = in.readLine(); System.out.println( temp ); }
Tak a jednoduchý server máme hotový. Konečný zdrojový vypadá takto:
package cz.leaf.tutorial.itnetwork.java.sockety; // import potřebných balíčků import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Server { // privátní atribut serverSocket private ServerSocket serverSocket; // konstruktor třídy Server public Server() { try { this.serverSocket = new ServerSocket(8080); // inicializace ServerSocket System.out.println("Spuštění serveru proběhlo úspěšně."); // vypsání hlášky při úspěšném spuštění k serveru Socket clientSocket = this.serverSocket.accept(); // vytvoření socketu pro klienta System.out.println("Klient se připojil z adresy " + clientSocket.getInetAddress().getHostAddress() + "."); // vypsání zprávy o připojení klienta BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()) ); // vytvoření BufferReaderu, se vstupním proudem se socketu klienta // nekonečný while cyklus pro vypisování zpráv od klienta while (true) { String temp = in.readLine(); // načtení zprávy od klienta do proměnné temp System.out.println(temp); // vypsání zprávy klienta z proměnné } } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { Server server = new Server(); // vytvoření instance třídy Server } }
Testování
Po spuštění aplikace se nám vypíše hláška o úspěšném spuštění:

V příští lekci, Komunikace Klient/Server - Klient, si naprogramujeme našeho klienta a vyzkoušíme jeho komunikaci se serverem.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 182x (18.31 kB)
Aplikace je včetně zdrojových kódů v jazyce Java