Komunikácia Klient / Server - 2. diel - Klient
V predchádzajúcej lekcii, Java spustenie - JVM argumenty , sme si predviedli, ako sa pri spustení definujú JVM parametre.
Zdravím u druhého dielu minisérie o socket v Jave. V tomto dieli si vytvoríme klienta pre náš server, ktorý sme urobili v minulom diele.
A teraz už k programovaniu ...
Takže si otvoríme náš projekt, v ktorom sme robili minule server a vytvoríme si v ňom druhú triedu, opäť s metódou main (), menom Client.
Než začneme programovať klienta, tak si zas importujete potrebné 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 metóde main () si vytvoríme inštanciu našej triedy Client, ktorú pomenujeme client.
public static void main(String[] args) { Client client = new Client(); }
Našou triede pridáme dva privátne atribúty. Prvá sa bude volať clientSocket a bude typu Socket, druhý pomenujeme in s typom Scanner pre načítanie správ od užívateľa.
private Socket clientSocket; private Scanner in;
Vytvoríme si konštruktor triedy Client, v ktorom si inicializujeme clientSocket. Ako prvý argument mu pri inicializácii odovzdáme adresu, na ktorej beží náš server, v našom prípade to je localhost a druhý argument je port, na ktorom bude bežať, teda 8080. Inicializáciu 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 inicializáciou si necháme vypísať správu o úspešnom spustení klienta a potom si inicializujeme náš Scanner pre načítanie dát od užívateľa.
System.out.println("Spuštění klienta proběhlo úspěšně."); this.in = new Scanner( System.in );
Mimo blok try - catch - catch si vytvoríme BufferedWriter, menom out, pre zapisovanie dát na server, a ako argument mu odovzdáme výstupný prúd z clientSocketu, ktorý získame zavolaním metódy getOutputStream (). A vytvorenie BufferedWriteru opäť obalíme do bloku try - catch.
try { BufferedWriter out = new BufferedWriter(new OutputStreamWriter( this.clientSocket.getOutputStream())); } catch (IOException e) { e.printStackTrace(); }
Vytvoríme si nekonečný while cyklus, ktorý nám bude odosielať dáta na server. V cykle si vytvoríme premennú temp, do ktorej sa budú ukladať správy od užívateľa načítanej metódou nextLine ().
while (true) { String temp = in.nextLine(); }
Pod načítanie správy do premennej vložíme správu do BufferedWriteru metódou write () a potom ju jednoducho odošleme metódou flush (). Nakoniec si necháme vypísať správu o úspešnom odoslaní.
out.write(temp + "\r\n"); out.flush(); System.out.println("Zpráva: \"" + temp + "\" byla odeslána.");
Konečný zdrojový kód by mal vyzerať 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 socketu 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 Scanneru } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedWriter out = new BufferedWriter(new OutputStreamWriter( this.clientSocket.getOutputStream())); //vytvoření BufferedWriteru 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 BufferedWriteru 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řídy server } }
Keď budeme chcieť spustiť celú našu komunikáciu, tak musíme postupne spustiť ako prvý server, a potom až klienta, inak by to nefungovalo.
V budúcej, poslednej časti, si náš server upravíme tak, aby sa na neho mohlo pripojiť viac klientov, než len jeden.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 132x (29.28 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java