IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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().

Otevřený strom projektu se Serverem. - Síť v Javě

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í:

Server pomocí socketů v Javě - Síť v Javě

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 181x (18.31 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Předchozí článek
Síť v Javě - Klient/Server - Obousměrná komunikace
Všechny články v sekci
Síť v Javě
Přeskočit článek
(nedoporučujeme)
Komunikace Klient/Server - Klient
Článek pro vás napsal Filip Stryk
Avatar
Uživatelské hodnocení:
19 hlasů
Aktivity