Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

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.

Trieda klient v Jave - Java - Pre pokročilých

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.

Klient a server v Jave - Java - Pre pokročilých

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

 

Predchádzajúci článok
Java spustenie - JVM argumenty
Všetky články v sekcii
Java - Pre pokročilých
Článok pre vás napísal Filip Stryk
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity