Presentaci - PowerPoint PPT Presentation

About This Presentation
Title:

Presentaci

Description:

Sockets i Threads Lorena Alvarez Montiel D8854711 Jordi Br nquez Jim nez E6334930 Jonathan Lafuente Castillo D8105261 en JAVA Codi del vector (III ... – PowerPoint PPT presentation

Number of Views:81
Avg rating:3.0/5.0
Slides: 36
Provided by: jbr137
Category:

less

Transcript and Presenter's Notes

Title: Presentaci


1
Sockets
i
Threads
Lorena Alvarez Montiel D8854711 Jordi Brínquez
Jiménez E6334930 Jonathan Lafuente Castillo
D8105261
en JAVA
2
Sockets i threads en JAVA
  • Sockets
  • Classe InetAddress.
  • Classe Socket.
  • Classe ServerSocket.
  • Classe DatagramSocket.
  • Threads
  • Què són els Threads i per què serveixen.
  • Classe Thread
  • Classe ThreadGroup.
  • Sockets i Threads en JAVA
  • Un exemple.

3
InetAddress
Aquesta classe conté les funcions que sutilitzen
per resoldre noms en _at_ IP i viceversa. Operacions
byte getAddress ()           Retorna l'adreça
IP d'aquest objecte. static InetAddress
getByName (String host)           Determina
(resol) l'adreça IP del host especificat. String
getHostAddress ()           Retorna l'adreça IP
amb la forma xxx.xxx.xxx.xxx String getHostName
()           Retorna el nom del host per aquesta
adreça IP. static InetAddress getLocalHost
()           Retorna el nom del host
local. String toString ()           Converteix
l'adreça IP en una cadena.
4
Socket
  • Un socket és un punt final de comunicació.
  • Les aplicacions client/servidor fan servir
    aquests mecanisme per comunicar-se entre ells.
  • Depenent del tipus de connexió es farà servir
  • Orientat a connexió
  • La classe Socket (per al client) i ServerSocket
    (per al servidor).
  • Orientat a no-connexió
  • La classe DatagramSocket (tant pel client com pel
    servidor).

5
Socket
Operacions constructores Socket ()
Crea un socket sense connectar. Socket
(InetAddress address, int port)           Crea un
socket i el connecta a l'adreça address i al
port port. Socket (String host,
int port)           Crea un socket i el connecta
al host host i al port port. Socket
(InetAddress address, int port,
InetAddress localAddr, int localPort)           Cr
ea un socket i el connecta a l'adreça i port
remots (address, port) amb l'adreça i port
locals localAddr, localPort). Socket
(String host, int port, InetAddress localAddr,
int localPort)           Idem que l'anterior pero
el host ve donat com un String.
6
Socket
Mètodes de informació del socket InetAddress
getInetAddress ()           Retorna l'adreça a la
que el socket esta connectat. InetAddress
getLocalAddress ()           Recupera l'adreça
local on el socket està connectat. int
getLocalPort ()           Retorna el port locat
on el socket està connectat. int getPort
()           Retorna el port remot on el socket
està connectat. String toString
()           Converteix aquest en una cadena que
el representa.
7
Socket
Mètodes de comunicació void close
()           Tanca el socket. InputStream
getInputStream ()           Retorna un input
stream per aquest socket. OutputStream
getOutputStream ()           Retorna un output
stream per aquest socket. Mètodes d'opcions del
socket int getSoTimeout ()           Retorna la
configuració del timeout. void setSoTimeout
(int timeout)           Activa/desactiva el
timeout d'aquest socket. El temps està en
milisegons.
8
ServerSocket
Constructores ServerSocket (int port)           C
rea un server socket en el port
especificat. ServerSocket (int port,
int backlog)           Crea un server socket en
el port especificat, fa el bind i accepta fins a
backlog clients. ServerSocket (int port,
int backlog, InetAddress bindAddr)           Crea
un server socket en el port especificat, fa el
bind a l'adreça bindAddr i accepta fins a
backlog clients. Mètodes de
comunicació Socket accept ()           Escolta
el socket esperant connexions i les acepta. void
close ()           Tanca el socket.
9
ServerSocket
Mètodes de informació del socket InetAddress
getInetAddress ()           Retorna l'adreça del
server socket. int getLocalPort
()           Retorna el port en el que el socket
està escoltant. int getSoTimeout
()           Retorna la configuració del
timeout. void setSoTimeout (int timeout)
Activa/desactiva el timeout d'aquest socket. El
temps està en milisegons. String toString
()           Converteix aquest en una cadena que
el representa.
10
DatagramSocket
Constructores DatagramSocket ()           Crea
un datagram socket i fa un bind a qualsevol port
disponible en la màquina local. DatagramSocket
(int port)           Crea un datagram socket i fa
un bind al port especificat de la màquina
local. DatagramSocket (int port,
InetAddress laddr)           Crea un datagram
socket, associat a l'adreça local
especificada.   Mètodes de comunicació void
close ()           Tanca el datagram
socket. void connect (InetAddress address,
int port)           Connecta el socket a l'adreça
remota. void disconnect ()           Tanca el
socket. void receive (DatagramPacket p)          
 Reb un paquet de datagram des del socket. void
send (DatagramPacket p)           Envia un paquet
de datagram pel socket.
11
DatagramSocket
Mètodes de informació del socket InetAddress
getInetAddress ()           Retorna l'adreça a la
qual el socket està connectat. InetAddress
getLocalAddress ()           Retorna l'adreça
local a la qual el socket està associat. int
getLocalPort ()           Retorna el port d'on
escolta el socket. int getPort
()           Retorna el port del socket. int
getSoTimeout ()           Retorna la configuració
del timeout. void setSoTimeout (int timeout)
Activa/desactiva el timeout d'aquest
socket. El temps està en milisegons.
12
Què són els Threads i per què serveixen.
Un thread és un flux dexecució dun programa, és
a dir unes instruccións que sexecuten de forma
continuada, un PC i un SP. Els threads es fan
servir per aprofitar el parallelísme i la
concurrència que els ordinadors multiprocessador
poden oferir, així com també facilitar la
programació (per exemple, el FTP fet al
laboratori). El gran aventatge que tenen
respecte dels processos és que permeten canvis de
context (de thread) de forma menys costosa que si
fossin diferents processos.
13
Thread
Operacions constructores Thread () Crea un nou
objecte de tipus Thread . Thread (Runnable
target) Crea un nou objecte target de tipus
Thread. Thread (Runnable target, String
name) Crea un nou objecte target de tipus Thread
amb nom name. Thread (String name) Crea un nou
objecte de tipus Thread de nom name. Thread
(ThreadGroup group, Runnable target) Crea un nou
objecte target de tipus Thread dins d'un
ThreadGroup anomenat group. Thread (ThreadGroup
group, Runnable target, String name) Crea un nou
objecte target de tipus Thread amb nom name dins
d'un ThreadGroup anomenat group. Thread
(ThreadGroup group, String name) Crea un nou
objecte de tipus Thread amb nom name dins d'un
ThreadGroup anomenat group.
14
Thread
Mètodes relacionats amb les propietats String
getName () Retorna el nom del
thread. int getPriority () Retorna la
prioritat del thread. ThreadGroup getThreadGroup
() Retorna el grup de threads al qual
pertany. void setName (String name)
Cambia el nom del thread. void setPriority (int
newPriority) Cambia la prioritat del
thread. Valors de la prioritat static int
MAX_PRIORITY static int MIN_PRIORITY static int
NORM_PRIORITY
15
Thread
Mètodes relacionats amb l'estat void destroy ()
Destrueix el thread, sense alliberar
memòria. boolean isAlive () Comproba
que el thread estigui viu. void join ()
Espera fins que el thread mor. void join (long
millis) Espera com a molt millis
milisegons fins que el thread mor. void join
(long millis, int nanos) Espera com a
molt millis milisegons i nanos nanosegons fins
que el thread mor. void run () Comença
l'execució d'un thread. static void sleep (long
millis) Adorm el thread durant millis
milisegons. static void sleep (long millis, int
nanos) Adorm el thread durant millis
milisegons i nanos nanosegons. void start ()
Engega l'execució del thread. static void
yield () Para l'execució del thread
actual i permet a altres threads la seva
execució.
16
Thread
Mètodes relacionats amb les interrupcions void
interrupt () Interrumpeix el
thread. static boolean interrupted ()
Comproba si el trheat ha estat instarromput i
borra el contingut de la variable
d'estat. boolean isInterrupted ()
Comproba si el trheat ha estat instarromput. Mèto
des relacionats amb el thread actual static int
activeCount () Retorna el nombre de
threads actius en aquests grup de
threads. static Thread currentThread ()
Returna una referència al thread que s'està
executant. static int enumerate (Thread
tarray) Copia al vector tarray els
threads actius en del seu grup i dels subgrups
que el componen. Mètode descriptor String
toString () Retorna una cadena que
representa al thread, aquesta inclou el nom, la
prioritat i el grup.
17
ThreadGroup
Operacions constructores ThreadGroup (String
name) Construeix un nou grup de
threads de nom name. ThreadGroup (ThreadGroup
parent, String name) Construeix un nou
grup de threads de nom name dintre del grup
parent. Mètodes relacionats amb les
propietats int getMaxPriority ()
Retorna la màxima prioritat del grup de
threads. String getName () Retorna el
nom del grup de threads. ThreadGroup getParent
() Returns el grup pare d'aquest
grup. void setMaxPriority (int pri)
Cambia la prioritat dels elements del grup a la
màxima possible.
18
ThreadGroup
Mètodes relacionats amb l'estat del grup int
activeCount () Retorna una estimació
del nombre de threads actius en aquest grup. int
activeGroupCount () Retorna una
estimació del nombre de grups actius en aquest
grup. int enumerate (Thread list)
Copia a la llista els threads actius d'aquest
grup i dels seus subgrups. int enumerate
(Thread list, boolean recurse) Copia
a la llista els threads actius d'aquest grup i en
cas que recurse valgui cert també dels
seus subgrups. int enumerate (ThreadGroup
list) Copia a la llista els subgrups
actius d'aquest grup. int enumerate
(ThreadGroup list, boolean recurse)
Copia a la llista els subgrups actius d'aquest
grup i en cas que recurse valgui cert també dels
seus subgrups. boolean isDestroyed ()
comproba si el grup de threads ha estat
destuït. void list () Llista per
pantalla informació sobre el grup.
19
ThreadGroup
Mètodes relacionats amb l'estat d'un grup de
threads void destroy () Destrueix el
grup i tots els seus subgrups. Mètodes
relacionats amb la seguretat void checkAccess ()
Comproba si el thread en execució té
permís per modificar aquest grup de
threads. Mètodes relacionats amb les
interrupcions void interrupt ()
Interromp tots els threads en aquest
grup. Mètode descriptor String toString ()
Retorna una cadena que representa al grup de
threads.
20
Seminari de CASO Sockets i Threads en JAVA
Exemple dús
21
Explicació de lexemple
  • Tenim diversos processos que accedeixen a un
    vector circular concurrentment uns processos
    llegint del vector i els altres escrivint-hi.
  • Quan es creen aquests processos, es connecten amb
    un servidor (de lectura o escriptura) que crea un
    thread i un socket per atendre'ls.

22
Explicació de lexemple
23
Codi de lescriptor
public class Emisor public static void
main(String args)throws IOException
OutputStream skout DataOutputStream dos
Socket sk null sk new
Socket("127.0.0.1",5502)//petició al servidor
descriptors try skout
sk.getOutputStream() dos new
DataOutputStream(skout) String missat
LlegirTeclat.LlegirLinea() //Llegeixo de teclat
while (missat.length() gt 1)
dos.writeUTF(missat) missat
LlegirTeclat.LlegirLinea()
dos.writeUTF(missat) dos.close()
skout.close() sk.close() catch
(IOException e)
24
Codi del thread descriptor (I)
public class EscriuPar extends Thread private
CuaString cua //vector compartit per tots els
processos private Socket sk //socket per
comunicar-se amb lescriptor que atén public
EscriuPar(CuaString h, Socket soc)
//constructora del thread cua h sk
soc public void run() //mètode que
sexecuta en fer start InputStream skin
DataInputStream dis try skin
sk.getInputStream() dis new
DataInputStream(skin) String st new
String (dis.readUTF()) //lectura del socket
try cua.SetString(st) //escriptura al vector
catch(InterruptedException e)
25
Codi del thread descriptor (II)
while (st.length() gt 0)//adormim el
proces try sleep((int)(Math.random()3000
)) catch(InterruptedException e)
st dis.readUTF() trycua.SetString(s
t) catch(InterruptedException e)
dis.close()//tanquem els canals
skin.close() sk.close()
catch(IOException e)
26
Codi del lector
public class Receptor public static void
main(String args)throws IOException Socket
sk null InputStream skin
DataInputStream dis sk new
Socket("127.0.0.1", 5503)//petició al servidor
de lectors. skin sk.getInputStream()
dis new DataInputStream(skin)//tenim una
sortida de dades String st new String
(dis.readUTF()) //comencem a llegir
System.out.println(st) // i a escriure per
pantalla while (st.length() gt 0) st
dis.readUTF() System.out.println(st)
dis.close() //tanquem els canals oberts.
skin.close() sk.close()
27
Codi del thread de lector (I)
class LlegeixPar extends Thread private
CuaString cua//vector compartit per tots els
processos private Socket sk//socket per
atendre el seu clien public
LlegeixPar(CuaString h, Socket s)
//constructora cua h //valor inicial
sk s public void run() OutputStream
skout DataOutputStream dos try
skout sk.getOutputStream() dos new
DataOutputStream(skout)//tenim una entrada de
dades String missat"" trymissat
cua.GetString()//llegim del vector
catch(InterruptedException e)
28
Codi del thread de lector (II)
while (missat.length() gt 1)
dos.writeUTF(missat) //escrivim al socket
trysleep((int)(Math.random()3000)) //adormim
el procés catch (InterruptedException
e) trymissat cua.GetString()
catch(InterruptedException e)
dos.writeUTF(missat) dos.close()
skout.close() sk.close() catch
(IOException e)
29
Codi del servidor
public class Servidors public static void main
(String args) CuaString cua new
CuaString(5) //creem el vector a
compartir ServEscrip serE new
ServEscrip(cua) //creem el servidor
escriptors serE.start() //el posem en
funcionament ServLec serL new ServLec(cua)
//creem el servidor de lectors serL.start()
//el posem en funcionament
Els servidors de lectors i escriptors són dos
threads perquè comparteixin el mateix vector.
30
Codi del servidor descriptors
class ServEscrip extends Thread private
CuaString cua //vector compartit per tots els
processos. static int maxim 2 //màxim de
clients que acceptarem. public
ServEscrip(CuaString c)//constructora cua
c public void run () ServerSocket ss
null Socket sk null int i 0
try ss new ServerSocket(5502) //creem
el ServerSocket per acceptar while (i lt
maxim) // peticions dels clients
sk ss.accept() //acceptem el client
EscriuPar esc new EscriuPar(cua, sk) //creem
el thead per esc.start() // atendrel i
el posem en funcionament. i
catch (IOException e)
31
Codi del servidor de lectors
  • class ServLec extends Thread
  • private CuaString cua//vector compartit per
    tots
  • static int maxim 2 // màxim de client per
    atendre
  • public ServLec(CuaString c) //constructora
  • cua c
  • public void run ()
  • ServerSocket ss null
  • Socket sk null
  • int i 0
  • try
  • ss new ServerSocket(5503) //Creem el
    ServerSocket per atendre
  • while (i lt maxim) // les
    peticions dels lectors
  • sk ss.accept() //acceptem la petició
  • LlegeixPar lec new LlegeixPar(cua,
    sk)//creem el thread per
  • lec.start() //atendrel i el posem en
    funcionament.
  • i
  • catch (IOException e)

32
Codi del vector (I)
class CuaString private String cua //cua
de cadenes de caràcters private int p_llegit
0 //apuntador al següent element a llegir
private int p_escrit 0 //apuntador al primer
buit de la cua private int buits, plens
//nombre de pos. buides i ocupades de la cua
public CuaString(int n) //constructora
if (n lt 1) n 10 cua new Stringn
buits cua.length plens 0
33
Codi del vector (II)
public synchronized String GetString() throws
InterruptedException while (plens 0)
try wait() //Adormim
el consumidor catch(InterruptedExcep
tion e) plens-- buits
System.out.println("LECTOR Llocs buits "
buits ", llocs plens " plens) String
valor cuap_llegit p_llegit (p_llegit
1) cua.length notifyAll() return
valor
34
Codi del vector (III)
public synchronized void SetString(String
val)throws InterruptedException while
(buits 0) try
wait() catch(InterruptedException
e) buits-- plens
System.out.println("ESCRIPTOR Llocs buits "
buits ", llocs plens " plens)
cuap_escrit val p_escrit (p_escrit
1) cua.length notifyAll() //despertem
tots els processos adormits per a que comprovin
si poden continuar.
35
Bibliografia
  • The Java Class Libraries -- Second Edition
    Volume 1
  • Patrick Chan, Rosanna Lee, Douglas Kramer
  • Java 1.2 al descubierto
  • Jamie Jaworski, Ed. Prentice Hall
  • Java 2 -- Curso de programación
  • Francisco Javier Ceballos, Ed. Rama
  • http//java.sun.com
  • http//www.cybercursos.net (Java desde cero)
Write a Comment
User Comments (0)
About PowerShow.com