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.