Lekce 13 - Komunikace Klient/Server - Klient
V minulé lekci, Komunikace Klient/Server - Server, jsme si ukázali, jak vytvořit jednoduchý server a klienta komunikující spolu přes TCP/IP. Vytvořili jsme server.
V dnešním Java tutoriálu o síťové komunikaci Klient/Server si vytvoříme klienta pro náš server.
Otevřeme si náš projekt, ve kterém jsme dělali minule server.
vytvoříme si v něm druhou třídu, opět s metodou main()
,
jménem Client
.
![Třída klient v Javě - Síť v Javě](images/11359/sihbwwnghwwbfnwwdwdwjmweuthbdfhtegd45bds684hbsedhbv5g4b65bfn.png)
Než začneme programovat klienta, tak si naimportujeme tyto potřebné balíčky:
import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner;
V metodě main()
si vytvoříme instanci naší třídy
Client
, kterou pojmenujeme client
:
public static void main(String[] args) { Client client = new Client(); }
Naší třídě přidáme dva privátní atributy. První se bude jmenovat
clientSocket
a bude typu Socket
. Druhý pojmenujeme
in
s typem Scanner
pro načítání zpráv od
uživatele:
private Socket clientSocket; private Scanner in;
Vytvoříme si konstruktor třídy Client
, ve kterém si
inicializujeme clientSocket
. Jako první argument mu při
inicializaci předáme adresu, na které běží náš server, v našem
případě to je localhost. druhý argument je port, na kterém
bude běžet, tedy 8080. Inicializaci obalíme do bloku
try – catch – catch
:
try { this.clientSocket = new Socket("localhost", 8080 ); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
Pod inicializací si necháme vypsat zprávu o úspěšném spuštění
klienta a poté si inicializujeme náš Scanner
pro načítání
dat od uživatele:
System.out.println("Spuštění klienta proběhlo úspěšně."); this.in = new Scanner( System.in );
Mimo blok try – catch – catch
si vytvoříme
BufferedWriter
pro zapisování dat na serveru. Pojmenujeme ho
out
. Jako argument mu předáme výstupní proud z
clientSocket
, který získáme zavoláním metody
getOutputStream()
. A vytvoření BufferedWriteru opět obalíme do
bloku try – catch
:
try { BufferedWriter out = new BufferedWriter(new OutputStreamWriter( this.clientSocket.getOutputStream())); } catch (IOException e) { e.printStackTrace(); }
Vytvoříme si nekonečný while
cyklus, který nám bude
odesílat data na server. V cyklu si vytvoříme proměnnou temp
,
do které se budou ukládat zprávy od uživatele načtené metodou
nextLine()
.
while (true) { String temp = in.nextLine(); }
Pod načtení zprávy do proměnné vložíme zprávu do BufferedWriteru
metodou write()
. Pak ji jednoduše odešleme metodou
flush()
. Nakonec si necháme vypsat zprávu o úspěšném
odeslání:
out.write(temp + "\r\n"); out.flush(); System.out.println("Zpráva: \"" + temp + "\" byla odeslána.");
Konečný zdrojový vypadá takto:
// import potřebných balíčků import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class Client { private Socket clientSocket; // socket pro klients private Scanner in; // scanner pro načítání dat od uživatele //konstruktor třídy Client public Client() { try { this.clientSocket = new Socket("localhost", 8080); // inicializace client socket System.out.println("Spuštění klienta proběhlo úspěšně."); // zpráva o úspěšném spuštění this.in = new Scanner(System.in); // inicializace Scanner } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedWriter out = new BufferedWriter(new OutputStreamWriter( this.clientSocket.getOutputStream())); //vytvoření BufferedWriter while (true) { String temp = in.nextLine(); // proměnná pro ukládání zpráv uživatele out.write(temp + "\r\n"); // zapsání zprávy do BufferedWriter out.flush(); // odeslání zprávy System.out.println("Zpráva: \"" + temp + "\" byla odeslána."); // oznámení o úspěšném odeslání } } catch (IOException e) { e.printStackTrace(); } } public static void main( String[] args ) { Client client = new Client(); // vytvoření instance třídyserver } }
Když budeme chtít spustit celou naši komunikaci, tak musíme postupně spustit jako první server, a pak až klienta, jinak by to nefungovalo.
![Klient a server v Javě - Síť v Javě](images/11359/oibfewruh54bae6vsdchbeausdfgbvsf4b5gggggg4.png)
V příští lekci, Komunikace Klient/Server - Úprava serveru a klienta, si upravíme náš server, aby se na něj mohlo připojit více klientů a obdržet zprávy od serveru.
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 131x (29.28 kB)
Aplikace je včetně zdrojových kódů v jazyce Java