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();                                          
   }                                                         
}