Implementacja serwera

Użyjemy implementacji serwerów w języku Java, które rozwijaliśmy w drugim module laboratoryjnym tego kursu. Poniżej znajdziesz szkielet prostej aplikacji serwerowej w języku Java.

import java.io.*;
import java.net.*;

public class Serwer
{
   public static final int PORT=50007;

   public static void main(String args[]) throws IOException
   {
      //tworzenie gniazda serwerowego
      ServerSocket serv;
      serv=new ServerSocket(PORT);

      //oczekiwanie na polaczenie i tworzenie gniazda sieciowego
      System.out.println("Nasluchuje: "+serv);
      Socket sock;
      sock=serv.accept();
      System.out.println("Jest polaczenie: "+sock);

      //tworzenie strumienia danych pobieranych z gniazda sieciowego
      BufferedReader inp;
      inp=new BufferedReader(new InputStreamReader(sock.getInputStream()));


      //tworzenie strumieni danych pobieranych z klawiatury i dostarczanych do socketu
      BufferedReader klaw;
      klaw=new BufferedReader(new InputStreamReader(System.in));
      PrintWriter outp;
      outp=new PrintWriter(sock.getOutputStream());

      //komunikacja - czytanie danych ze strumienia
      String str;
      str=inp.readLine();
      System.out.println("<Nadeszlo:> " + str);

      //komunikacja - czytanie danych z klawiatury i przekazywanie ich do strumienia
      System.out.print("<Wysylamy:> ");
      String str=klaw.readLine();
      outp.println(str);
      outp.flush();

      //zamykanie polaczenia
      inp.close();
      sock.close();
      serv.close();

   }
}

Poniżej znajdziesz także szkielet implementacji serwera wielowątkowego, który oczekuje na połączenia klientów, a następnie dla każdego klienta tworzy oddzielny wątek który zajmie się obsłużeniem tego klienta.

import java.io.*;
import java.net.*;

class ObslugaZadania extends Thread
{
   Socket sock;

   ObslugaZadania(Socket klientSocket)
   {
      this.sock=klientSocket;
   }

   public void run()
   {

   }

}

public class Serwer
{
   public static void main(String[] args) throws IOException
   {
      ServerSocket serv=new ServerSocket(80);

      while(true)
      {
         //przyjecie polaczenia
         System.out.println("Oczekiwanie na polaczenie...");
         Socket sock=serv.accept();

         //tworzenie watku obslugi tego polaczenia
         new ObslugaZadania(sock).start();
      }
   }
}

Na podstawie powyższego przykładu napisz implementację serwera który będzie czekał na zgłoszenia klientów, przyjmował połączenia, a następnie przekazywał komunikaty otrzymane od dowolnego klienta do wszystkich przyłączonych mobilnych aplikacji klienckich.

Ćwiczenie 1

Rozwiń aplikację mobilną oraz serwer w taki sposób żeby aplikacja mobilna umożliwiała wymianę komunikatów z serwerem według protokołu Twojego pomysłu. Aplikacja mobilna powinna wykorzystywać widok listy, w której będą przechowywane wszystkie poprzednie komunikaty odebrane z serwera i wysłane do serwera.

Ćwiczenie 2

Rozwiń aplikację z poprzedniego przykładu w taki sposób, żeby kilka aplikacji mobilnych mogło przyłączyć się do serwera, który będzie przekazywał odebrane komunikaty do wybranego klienta lub rozsyłał do wszystkich klientów.

Następna część - Programowanie aplikacji mobilnych