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