Strumienie, gniazda sieciowe i wątki - komunikator internetowy (zestaw II)
ćw. 1.
Napisz implementację komunikatora internetowego działającego w trybie duplex (komunikaty mogą być wysyłane i odbierane równolegle i w dowolnych sekwencjach, niekoniecznie na przemian). W tym przypadku wysyłanie komunikatów i odbieranie komunikatów musi odbywać się w oddzielnych wątkach. Jak zapewne pamiętasz z wykładu, trzeba w tym celu napisać klasę która rozszerza klasę biblioteczną java.lang.Thread i umieścić instrukcje składające się na cykl życia wątku w metodzie public void run() tej klasy. Poniżej znajdziesz szkielet takiej klasy. Następnie w wątku głównym trzeba utworzyć obiekt tej klasy i wywołać na jego rzecz metodę start(). Podobnie jak w poprzednim przykładzie, Twój komunikator powinien działać do momentu, kiedy jedna ze stron prześle komunikat "koniec" albo "KONIEC". Po przesłaniu takiego komunikatu zarówno klien jak i serwer powinny wypisać komunikat "Koniec połączenia" i zakończyć działanie.
import java.io.*; import java.net.*;
class Odbior extends Thread { Socket sock; BufferedReader sockReader; public Odbior(Socket sock) throws IOException { this.sock=sock; this.sockReader=new BufferedReader(new InputStreamReader(sock.getInputStream())); } public void run() { } } |
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 watka odbierajacego new Odbior(sock).start(); //zamykanie polaczenia serv.close(); sock.close(); } } |
import java.io.*; import java.net.*;
class Odbior extends Thread { Socket sock; BufferedReader sockReader; public Odbior(Socket sock) throws IOException { this.sock=sock; this.sockReader=new BufferedReader(new InputStreamReader(sock.getInputStream())); } public void run() { } } |
public class Klient { public static final int PORT=50007; public static final String HOST = "127.0.0.1"; public static void main(String[] args) throws IOException { //nawiazanie polaczenia z serwerem Socket sock; sock=new Socket(HOST,PORT); System.out.println("Nawiazalem polaczenie: "+sock); //tworzenie watka odbierajacego new Odbior(sock).start(); //zamykanie polaczenia sock.close(); } } |