rendered paste bodyimport java.io.*;import java.net.*;import java.util.*;class SerwerPolecen { public static void main(String[] args) { new WatekSerweraPolecen().start(); new WatekSerweraPolecen().start(); new WatekSerweraPolecen().start(); new WatekSerweraPolecen().start(); new WatekSerweraPolecen().start(); }}class WatekSerweraPolecen extends Thread { private DatagramSocket m_gniazdkoDat = null; private BufferedReader m_strumienPolecen = null; private int licznik = 0; WatekSerweraPolecen() { super("Watek Serwera Polecen"); try { // utworzenie nowego gniazdka przeznaczonego do komunikacji // z wykorzystaniem datagramów m_gniazdkoDat = new DatagramSocket(); // zarezerwowanie portu do komunikacji datagramowej, metoda // getLocalPort rezerwuje najbliższy wolny port. Dzięki temu // unikamy sytuacji gdy port, który chcemy zająć jest // wykorzystywany przez inną usługę. System.out.println("SerwerPolecen nasluchuje na porcie: " + m_gniazdkoDat.getLocalPort()); } catch (java.io.IOException e) { System.err.println("Nie moge utworzyc gniazdka I/O datagramow."); } } public void run() { if (m_gniazdkoDat == null) return; while(true) { try { byte[] bufor = new byte[1048576]; DatagramPacket pakiet; InetAddress adres; int port; String daneDoWyslania = null; // odebranie zapytania od klienta pakiet = new DatagramPacket(bufor, 1048576); m_gniazdkoDat.receive(pakiet); adres = pakiet.getAddress(); port = pakiet.getPort(); String daneOdebrane = new String(pakiet.getData()).trim(); licznik++; System.out.println("Zapytanie nr "+ licznik +" z adresu "+ pakiet.getAddress() + " z portu " + pakiet.getPort() + " o informacje dla " + daneOdebrane); // wysłanie odpowiedzi // pobranie polecenia z pliku daneDoWyslania = polecenie(daneOdebrane); // zamienia string w tablice bajtów w celu // umożliwienia wysłania jej w datagramie bufor = daneDoWyslania.getBytes(); // utworzenie pakietu przeznaczonego do wysłania pakiet = new DatagramPacket(bufor, bufor.length, adres, port); // wysłanie datagramu m_gniazdkoDat.send(pakiet); // Jeśli w polu użytkownik zostało podane słowo zamknij // serwer kończy swoje działanie if (daneOdebrane.compareTo("zamknij")==0) break; } catch (IOException e) { System.err.println("IOException: " + e); e.printStackTrace(); } } } protected void finalize() { if (m_gniazdkoDat != null) { m_gniazdkoDat.close(); m_gniazdkoDat = null; System.out.println("Zamknięcie gniazdka datagramow."); } } // metoda polecenie, czyta z pliku polecenia // przeznaczone dla użytkownika private String polecenie(String kto) { String linia = "Nie ma polecen dla "+ kto; try { StringBuffer info = new StringBuffer("Wiadomosc wyslana " + new Date().toLocaleString()+": \n"); m_strumienPolecen = new BufferedReader(new InputStreamReader(new FileInputStream(kto+".txt"))); while((linia = m_strumienPolecen.readLine())!=null) info.append(linia+"\n"); return info.toString(); } catch (FileNotFoundException e) { System.err.println("Nie moge otworzyc pliku z poleceniami: " + kto + ".txt"); } catch (IOException e) { linia = "Na serwerze wystapil blad IOException."; } return linia; }}