package elte.java2_utikalauz5.net; import java.io.*; import java.net.*; /** Egy összeköttetés-alapú szerveralkalmazás. Ez az alkalmazás az egyetlen paraméterében megadott sorszámú TCP porton várakozik kliensalkalmazások rákapcsolódási kérelmére. Ha egy kliens rákapcsolódik, akkor vár tőle egy egész számot, és négyzetre emelve visszaküldi a kapott eredményt.

Ez egy szekvenciális szerver, vagyis a klienseket egymás után szolgálja ki (azaz ha egy kliens sokáig nem küld adatot, akkor a szerver addig várakozni fog ...). A szerver leáll, ha 0 számot küld egy kliens (de a 0-t négyzetre emelve visszaküldi a kliensnek ilyenkor is). @link.forrásfájl {@docRoot}/../data/net/src CoSeTeszt.java @link.letöltés {@docRoot}/../data/net CoSeTeszt.jar @since Java Útikalauz programozóknak */ public class CoSeTeszt { public static void hasznalati_utasitas() { System.out.println("Használat: java CoSeTeszt portsorszám"); System.exit(-1); } public static void main(String[] args) { int server_port = 0; ServerSocket ss = null; Socket s = null; String keres = null, valasz = null; int keres_erteke = 0; boolean kilep = false; if (args.length != 1) hasznalati_utasitas(); try { server_port = Integer.parseInt(args[0]); } catch (NumberFormatException e) { hasznalati_utasitas(); } try { /* Létrehozzuk a kommunikációs végpontunkat */ ss = new ServerSocket(server_port); while (!kilep) { /* Felvesszük a kapcsolatot a következő klienssel */ /* A szerver itt várakozik egy új kliensre, ha kell */ s = ss.accept(); /* Ezzel tudunk a kommunikációs végpontunkról adatot olvasni: */ BufferedReader input = new BufferedReader( new InputStreamReader(s.getInputStream())); /* Ezzel tudunk a kommunikációs végpontunkra adatot írni: */ PrintWriter output = new PrintWriter(s.getOutputStream()); // Itt kezdődik a szolgáltatásfüggő kódrészlet keres = input.readLine(); try { keres_erteke = Integer.parseInt(keres); valasz = Integer.toString(keres_erteke*keres_erteke); } catch (NumberFormatException e) { valasz = "Érvénytelen adat!"; } output.println(valasz); output.flush(); // Visszaküldtük if (keres_erteke == 0) kilep = true; // Álljon le a szerver // Itt fejeződik be a szolgáltatásfüggő kódrészlet s.close(); } } catch (IOException e) { System.err.println(e); // Kiírtuk a hiba okát ... } finally { // Lezárjuk a kommunikációs végponthoz tartozó socketot ... try { ss.close(); } catch (IOException ex) { System.err.println("Nem tudom lezárni a kapcsolatot!"); } } } }