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 - 1. diel - Server

V predchádzajúcej lekcii, Java spustenie - JVM argumenty , sme si predviedli, ako sa pri spustení definujú JVM parametre.

Zdravím vás u minisérie asi troch Java tutoriálov, v ktorých si ukážeme, ako vytvoriť jednoduchú komunikáciu Klient / Server. Ja budem používať ako IDE IntelliJ Idea, ale vy môžete používať akékoľvek iné, ako Eclipse alebo Netbeans. Nebude to nič ťažké, takže nemajte strach.

Čo budeme potrebovať?

Budeme si musieť vytvoriť server, ktorý bude načúvať nejakému portu ak tomu si vytvoríme klienta, ktorý bude odosielať dáta na ten určitý port, ktorému server počúva. Využijeme na to TCP protokol. Okrem TCP protokolu existuje ešte UDP protokol, ale ten nie je tak spoľahlivý.

A teraz už k samotnému serveru ...

Ako prvé si vytvoríme server. Klienta urobíme v ďalšom dieli. Vytvoríme si nový projekt, ktorý si môžete pomenovať podľa ľubovôle, ja si ho pomenujem Sockety. V projekte si vytvorte triedu Server s metódou main ().

Otvorený strom projektu sa Serverom. - Java - Pre pokročilých

Ešte než začneme písať program, tak si do triedy importujte tieto balíky:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

Najprv si vytvoríme v metóde main () inštanciu triedy Server menom server. Potom si našej triede pridáme privátnej atribút menom serverSocket typu ServerSocket a vytvoríme si konštruktor. V konstruktoru si inicializujeme serverSocket a ako argument mu odovzdáme port, ktorému bude server počúvať, v mojom prípade to bude port 8080. Za inicializáciu si pridáme výpis, že bol server úspešne spustený. Inicializáciu 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 tom istom try- catch bloku si vytvoríme socket pre klienta, menom clientSocket, zavolaním metódy accept () na serverSocketu. Keďže je metóda accept () blokovacie, tak nám zastaví beh programu kým sa nepripojí klient. Vďaka tomu si môžeme pod vytvorením clientSocketu nechať vypísať správu, že sa klient pripojil. V správe si vypíšeme aj adresu, z ktorej sa klient pripojil. Tú získame metódou getInnetAdress (), ktorá vracia objekt InnetAdress, z ktorého metódou getHostAdress () získame adresu klienta.

Socket clientSocket = this.serverSocket.accept();
System.out.println("Klient se připojil z adresy " + clientSocket.getInetAddress().getHostAddress() + ".");

Vytvoríme si BufferedReader s názvom in, ktorému odovzdáme vstupný prúd zo socketu klienta zavolaním metódy getInputStream () na clientSocketu.

BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

Teraz si vytvoríme nekonečný while cyklus. V cykle si vytvoríme premennú typu String s názvom temp, do ktorej uložíme dáta od klienta zavolaním metódy readline () na BufferedReader. Teraz zostáva už len vypísať správu od klienta, ktoré je uložené v premennej temp.

while (true) {
    String temp = in.readLine();
    System.out.println( temp );
}

Tak a jednoduchý server máme hotový. Konečný zdrojový kód by mal vyzerať 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 ServerSocketu
            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
    }
}

Ak si ho teraz spustíme, tak by sa nám mala vypísať hláška, že sa úspešne spustil.

Server pomocou socketov v Jave - Java - Pre pokročilých

Nabudúce si urobíme klienta. Zdrojové kódy, vrátane spustiteľného * .jar súboru máte k stiahnutiu pod článkom.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 182x (18.31 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