tehnologii de programare in internet tpi / rstdiscipline.elcom.pub.ro/tpi/curs_tpi_33_v01.pdftpi...

24
TPI 17.02.2010 21:52 1 Tehnologii de Programare in Internet (TPI / RST) Titulari curs: Mihnea Magheti, Eduard-Cristian Popovici Suport curs: http://discipline.elcom.pub.ro/tpi/ Moodle: http://electronica07.curs.ncit.pub.ro/course/category.php?id=3 UPB – Facultatea ETTI – Curs TPI – an III – RST 2009 - 2010

Upload: others

Post on 03-Mar-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 1

Tehnologii de Programare in Internet(TPI / RST)

Titulari curs: Mihnea Magheti, Eduard-Cristian PopoviciSuport curs: http://discipline.elcom.pub.ro/tpi/ Moodle: http://electronica07.curs.ncit.pub.ro/course/category.php?id=3

UPB – Facultatea ETTI – Curs TPI – an III – RST

2009 - 2010

Page 2: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 2

Structura cursului

1. Introducere in tehnologiile Internet

2. Introducere in tehnologiile desktop (SE) Java2.1. Elemente de baza. Tipuri de date referinta. Clase de biblioteca2.2. Clase pentru fluxuri de intrare-iesire (IO)

3. Programarea la nivel socket in Java3.1. Introducere in Protocolul Internet (IP) si stiva de protocoale IP3.2. Socketuri flux (TCP) Java si programe multifilare (threads)3.3. Socketuri datagrama (UDP) Java

4. Tehnologii Java de programare a aplicatiilor Web (EE) Java4.1. Tehnologii client. Miniaplicatii Java (applet-uri)4.2. Clase pentru interfete grafice cu utilizatorul (AWT, Swing)4.3. Platforma Java EE. Arhitectura si tehnologiile implicate4.4. Tehnologii server. Tehnologia Java Servlet4.5. Tehnologia Java ServerPages (JSP)4.6. Accesul la baze de date prin tehnologii Java (JDBC, Hibernate) 4.7. Tehnologii avansate (frameworks, componente EJB, Servicii Web)

Continut curs TPI

Page 3: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 3

Structura cursului

3. Programarea la nivel socket in Java3.3. Socketuri datagrama (UDP) Java

Page 4: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 4

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDPClasa DatagramPacket reprezinta

- un pachet UDP (o datagrama)

- utilizat pentru livrare fara conexiune (include in mod normal informatii privind adresele IP si porturile sursa si destinatie)

Clasa DatagramSocket reprezinta

- un socket UDP

- prin care se trimit sau se primesc pachete datagrama peste retele IP

- prin intermediul protocolului UDP

Clasa MulticastSocket (subclasa a DatagramSocket care adauga functionalitatilegate de multicast) poate fi utilizata pentru

- trimiterea si receptia unui pachet datagrama catre, respectiv dinspre, un grup multicast

Page 5: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 5

Aplicatia

instanta DatagramSocket

instanta DatagramPacket

new

new

send(packet)

packet

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDPUn DatagramPacket este trimis printr-un DatagramSocket

- apeland la metoda send() a clasei DatagramSocket

- careia i se paseaza ca parametru respectivul DatagramPacket

Page 6: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 6

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDPUn DatagramPacket este primit printr-un DatagramSocket

- apeland la metoda receive() a clasei DatagramSocket

- careia i se paseaza ca parametru un DatagramPacket pregatit pentrureceptie

Aplicatia

instanta DatagramSocket

instanta DatagramPacket

new

new

receive(packet)

packet

Page 7: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 7

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDPPrincipalii constructori ai clasei DatagramPacket

DatagramPacket(byte[] buf, int length, InetAddress address, int port)Construieste un obiect DatagramPacket pregatindu-l pentru trimiterea unui pachet de lungime length catre numarul de port UDP specificat (port) al gazdei cu adresa specificata (address), furnizandu-i tabloul de octeti buf din care sa fie preluate datele pachetului (length trebuie sa fie mai mic sau egal cu buf.length).

DatagramPacket(byte[] buf, int length)Construieste un obiect DatagramPacket pregatindu-l pentru receptia unui pachet de lungime length, furnizandu-i tabloul de octeti buf in care sa fie plasate datele pachetului (length trebuie sa fie mai mic sau egal cu buf.length).

Principalii constructori ai clasei DatagramSocket

DatagramSocket(int port, InetAddress laddr)Construieste un socket datagrame legat pe local la portul UDP si adresa IP specificate

DatagramSocket(int port)Construieste un socket datagrame si il leaga la portul UDP specificat pe masina locala.

DatagramSocket()Construieste un socket datagrame si il leaga la un port UDP disponibil pe masina locala.

Page 8: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 8

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDPDeclaratiile si descrierea catorva metode ale clasei DatagramPacket

getPort()Returneaza numarul de port UDP al masinii catre care pachetul

curent va fi trimis sau de la care pachetul curent va fi receptionat.

int

getOffset()Returneaza indexul (offsetul) la care sunt plasate datele de trimis

sau de receptionat in tabloul de octeti.

int

getLength()Returneaza numarul de octeti (lungimea bufferului) de date de

trimis sau de receptionat.

int

getData()Returneaza tabloul de octeti (bufferul) care contine datele

pachetului

byte[]

getAddress()Returneaza adresa IP sub forma de obiect InetAddress a masinii

catre care pachetul curent va fi trimis sau de la care va fi receptionat.

InetAddress

Page 9: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 9

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDPDeclaratiile si descrierea catorva metode ale clasei DatagramPacket

setPort(int iport)Stabileste numarul de port UDP al masinii catre care pachetul va fi trimis.

void

setLength(int length)Stabileste numarul de octeti (lungimea bufferului) de date de trimis sau de

receptionat.

void

setData(byte[] buf, int offset, int length)Stabileste tabloul de octeti (bufferul) care contine datele pachetului curent

specificandu-i indexul offset de la care sa inceapa plasarea datelor pachetului in tablou.

void

setData(byte[] buf)Stabileste tabloul de octeti (bufferul) care contine datele pachetului curent

(implicit indexul offset=0).

void

setAddress(InetAddress iaddr)Stabileste adresa IP sub forma de obiect InetAddress a masinii catre care

pachetul curent va fi trimis.

void

Page 10: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 10

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDPDeclaratiile si descrierea catorva metode ale clasei DatagramSocket

connect (InetAddress address, int port)”Conecteaza” socketul curent la adresa IP si numarul de port

specificate (acestea actioneaza ca un filtru, prin socketul conectatputand fi trimise sau primite pachete doar catre respectiv de la adresaIP si numarul de port specificate). Implicit socketul e neconectat.

void

close()Inchide socketul datagrama curent.

void

send (DatagramPacket p)Trimite un pachet datagrama prin socketul curent.

void

receive (DatagramPacket p)Receptioneaza un pachet datagrama prin socketul curent.

void

getLocalPort()Returneaza numarul de port local la care este legat socketul curent.

int

getLocalAddress()Obtine adresa IP locala la care este legat socketul curent.

InetAddress

Page 11: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 11

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDPDeclaratiile si descrierea catorva metode ale clasei DatagramSocket

setSoTimeout(int timeout)Stabileste valoarea optiunii SO_TIMEOUT la un timeout specificat, in

millisecunde.

void

getSoTimeout()Obtine valoarea optiunii SO_TIMEOUT.

int

isConnected()Returneaza o valoare logica indicand daca socketul curent e conectat

boolean

disconnect()Deconecteaza socketul curent.

void

getPort()Returneaza numarul de port UDP la care socketul curent este

conectat (-1 daca nu este conectat).

int

getInetAddress()Returneaza adresa IP la care socketul curent e conectat (null daca

nu e).

InetAddress

Page 12: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 12

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDPDeclaratiile si descrierea catorva metode ale clasei DatagramSocket

setTrafficClass(int tc)Stabileste valoarea octetului clasa de trafic (QoS) sau tip serviciu (ToS) in

antetul datagramei IP care incapsuleaza datagramele UDP trimise prin socket

void

getTrafficClass()Obtine valoarea octetului clasa de trafic (QoS) sau tip de serviciu (ToS) in

antetul datagramei IP care incapsuleaza datagramele UDP trimise prin socket

int

setSendBufferSize(int size)Stabileste optiunea SO_SNDBUF pentru socket la valoarea specificata.

void

getSendBufferSize()Returneaza valoarea optiunii SO_ SNDBUF pentru socketul curent, adica

dimensiunea bufferului utilizat de platforma pentru pachetele trimise de socket

int

setReceiveBufferSize(int size)Stabileste optiunea SO_RCVBUF pentru socket la valoarea specificata.

void

getReceiveBufferSize()Returneaza valoarea optiunii SO_RCVBUF pentru socketul curent, adica

dimensiunea bufferului utilizat de platforma pentru pachetele primite de socket

int

Page 13: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 13

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDP

Secventa tipica pentru crearea unui pachet datagrama (UDP) pentru timitere

// Stabilirea adresei serveruluiString adresaIP = "localhost";

// Stabilirea portului serveruluiint portUDP = 2000;

// Crearea tabloului de octeti (bufferului) de date String mesaj = "mesaj de trimis";byte[] bufferDate = mesaj.getBytes();

// Crearea pachetului de trimistry {

DatagramPacket pachetUDP = new DatagramPacket(bufferDate, bufferDate.length, InetAddress.getByName(adresaIP), portUDP);

}catch (UnknownHostException ex) {

System.err.println(ex);}

123456789101112131415161718

Page 14: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 14

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDP

Secventa tipica pentru crearea unui pachet datagrama (UDP) pentru receptie// Crearea tabloului de octeti (bufferului) de date byte[] bufferDate = new byte[4096];

// Crearea pachetului de primittry {

DatagramPacket pachetUDP = new DatagramPacket(bufferDate, bufferDate.length);

}catch (UnknownHostException ex) {

System.err.println(ex);}

1234567891011

Secventa tipica pentru citirea din pachetul UDP a datelor primite// Obtinerea datelor pachetului ca tablou de octetibufferDate = pachetUDP.getData();

// Reconstructia mesajului textString mesajPrimit =

new String(bufferDate, 0, pachetUDP.getLength());

123456

Page 15: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 15

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDP

Secventa tipica pentru crearea socket-ului unei aplicatii client// Crearea socketuluiDatagramSocket socketUDP = new DatagramSocket();

Secventa tipica pentru crearea socket-ului unei aplicatii server// Stabilirea portului serveruluiint portServer = 2000;// Crearea socketuluiDatagramSocket socketUDP = new DatagramSocket(portServer);

Trimiterea de date prin socket// Trimiterea pachetului UDPsocketUDP.send(pachetDeTrimis);

// Receptia unui pachet UDP - blocare in asteptaresocketUDP.receive(pachetPrimit);

Primirea de date prin socket

Page 16: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 16

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDP

Identificarea porturilor UDP locale pe care sunt conexiuni prin incercarea de a crea pe ele socket-uri UDPimport java.net.*;

public class ScannerPorturiUDPLocale {public static void main (String args[]) {

DatagramSocket serverUDP;for (int portUDP=1; portUDP < 65536; portUDP++) {

try {// Urmatoarele linii genereaza exceptie prinsa de blocul catch// in cazul in care e deja un server pe portul portUDPserverUDP = new DatagramSocket(portUDP);serverUDP.close();

}catch (SocketException ex) { System.err.println("Exista server UDP pe portul " + portUDP);

}}

}}

123456789101112131415161718

Page 17: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 17

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDP

Program server ecou cu pierderi (10% din pachetele primite) import java.net.*;import java.io.*;

/*** Server ecou care pierde in mod aleator 10% din pachete*/public class ServerEcouCuPierderiDatagrame {

public static void main(String args[]) throws IOException {

BufferedReader inConsola = new BufferedReader(newInputStreamReader(System.in));

System.out.print("Introduceti numarul de port al serverului: "); int portUDP = Integer.parseInt(inConsola.readLine());

// Crearea socket-uluiDatagramSocket socketUDP = new DatagramSocket(portUDP);

123456789101112131415161718

Page 18: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 18

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDP

Program server ecou cu pierderi (10% din pachetele primite)

// Tratarea clientuluiwhile (true) {

// Primirea pachetuluibyte bufferDate[] = new byte[65535];

DatagramPacket pachetUDP = new DatagramPacket(bufferDate, bufferDate.length);

socketUDP.receive(pachetUDP);

System.out.println("S-au primit " + pachetUDP.getLength() +" octeti, <<" + pachetUDP.getData() + ">>");

// Decizia asupra modului de tratare a pachetului// Trimiterea pachetului

19202122232425262728293031323334

Page 19: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 19

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDP

Program server ecou cu pierderi (10% din pachetele primite)

if (Math.random() < .9) {System.out.println("Pachetul va fi trimis in ecou.");

DatagramPacket pachetUDPEcou = new DatagramPacket(pachetUDP.getData(), pachetUDP.getLength(), pachetUDP.getAddress(), pachetUDP.getPort());

socketUDP.send(pachetUDPEcou);System.out.println("Raspuns trimis.");

}

// Aruncarea pachetuluielse {System.out.println("Pachetul a fost aruncat.");

}}

} }

353637383940414243444546474849505152

Page 20: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 20

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDP

Client pentru server de ecou cu pierderi (retransmite la intarzieri >10 secundeale pachetelor ecou de la server)

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

public class ClientRetransmisie {protected DatagramSocket socketUDP;protected DatagramPacket pachetUDP;protected Asteptare timer;

protected void trimitePachet() throws IOException {

socketUDP.send(pachetUDP);System.out.println("Pachet trimis.");

// Crearea firului timer Asteptaretimer = new Asteptare(10, this);

// Pornirea firului timer Asteptaretimer.start();

}

12345678910111213141516171819

Page 21: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 21

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDP

Client pentru server de ecou cu pierderiprotected void primestePachet() throws IOException {

byte bufferDate[] = new byte[65535];

DatagramPacket pachetUDP = new DatagramPacket(bufferDate, bufferDate.length);

socketUDP.receive(pachetUDP);

ByteArrayInputStream inTablou = new ByteArrayInputStream(pachetUDP.getData(), 0, pachetUDP.getLength());

DataInputStream inDateFormatate = new DataInputStream(inTablou);

String textPrimit = inDateFormatate.readUTF();System.out.println("S-a primit " + textPrimit);

// Oprirea firului timer timer.stop();

}

20212223242526272829303132333435363738

Page 22: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 22

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDP

Client pentru server de ecou cu pierderipublic static void main(String args[]) throws IOException {

String adresaServer = JOptionPane.showInputDialog("Introduceti adresa IP a serverului: ");

int portServer = Integer.parseInt(JOptionPane.showInputDialog("Introduceti numarul de port al serverului: "));

String textDeTrimis = JOptionPane.showInputDialog(ClientRetransmisie client = new ClientRetransmisie();

// Creare socketclient.socketUDP = new DatagramSocket();

// Constructie pachetByteArrayOutputStream outTablou = new ByteArrayOutputStream();DataOutputStream outDateFormatate = new DataOutputStream(outTablou);outDateFormatate.writeUTF(textDeTrimis);

byte[] bufferDate = outTablou.toByteArray();client.pachetUDP = new DatagramPacket(bufferDate, bufferDate.length,

InetAddress.getByName(adresaServer), portServer);

39404142434445464748495051525354555657

Page 23: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 23

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDP

Client pentru server de ecou cu pierderiwhile (true) {

// Trimitere pachetclient.trimitePachet();

// Primire pachetclient.primestePachet();

System.out.println("Pauza 2 secunde...");try {Thread.sleep(2000);

} catch (InterruptedException ex) {ex.printStackTrace();

}}

} }

585960616263646566676869707172737475

Page 24: Tehnologii de Programare in Internet TPI / RSTdiscipline.elcom.pub.ro/tpi/Curs_TPI_33_v01.pdfTPI 17.02.2010 21:52 8 3.3. Socketuri datagrama (UDP) Java Crearea si utilizarea socket-urilor

TPI 17.02.2010 21:52 24

3.3. Socketuri datagrama (UDP) JavaCrearea si utilizarea socket-urilor UDP

Clientul utilizeaza urmatoarea clasa care lucreaza cu fire de executieimport java.net.*;import java.io.*;

class Asteptare extends Thread {private ClientRetransmisie client;private int durata;

public Asteptare (int durata, ClientRetransmisie client) {this.client = client;this.durata = durata;

}public void run() {try {Thread.sleep (durata*1000);System.out.println("Retransmisie...");try {// Retransmisie pachetclient.trimitePachet();

} catch (IOException ex) { ex.printStackTrace(); }} catch (InterruptedException ex) { ex.printStackTrace (); }

}}

12345678910111213141516171819202122