Está en la página 1de 63

LaboratoriodeRedesdeComunicaciones ProgramacinconSocketsenJava

Socketsorientadosaconexin Socketsnoorientadosaconexin

UNIVERSIDADEDACORUA

Java:Distribuido

UNIVERSIDADEDACORUA

Javasehaconstruidoconextensascapacidadesde interconexinTCP/IP.Existenlibrerasderutinaspara accedereinteractuarconprotocoloscomohttpyftp.Esto permitealosprogramadoresaccederalainformacina travsdelaredcontantafacilidadcomoalosficheros locales. Javaensnoesdistribuido,sinoqueproporcionalas librerasyherramientasparaquelosprogramaspuedanser distribuidos,esdecir,quesecorranenvariasmquinas, interactuando.

Octubre2007

LaboratoriodeRedesdeComunicaciones

Java:Distribuido
Pensadoparasuaplicacinenredes. Soportavariosnivelesdeconectividadenred:
PermiteabrirunURL RMI Permitetrabajarconsockets

UNIVERSIDADEDACORUA

Permitecreardeformasencilla,tantoaplicacionescliente comoservidor.

Octubre2007

LaboratoriodeRedesdeComunicaciones

Clientesyservidores
AplicacionesCliente/Servidor Cliente:
Programaqueejecutaelusuario Solicitaunservicioaunamquina

UNIVERSIDADEDACORUA

Servidor:
Ofreceunservicioamltiplesclientes

Ejemplos:telnet,ftp,web,echo

Octubre2007

LaboratoriodeRedesdeComunicaciones

Ejemplo:Serviciodetelnet

UNIVERSIDADEDACORUA

Ejecutauntelnet

Servidordetelnet:telnetd

Octubre2007

LaboratoriodeRedesdeComunicaciones

Conceptosbsicosderedes
EnInternetseutilizalapilade protocolosTCP/IPparael establecimientoyrealizacinde conexiones,basadoenun conjuntodeprotocolos organizadosendiferentes niveles:Enlace/Red/ Transporte/Aplicacin. Normalmente,cuandose escribenaplicacionesJavaen Redseprogramaanivelde aplicacin. Esposiblerealizarprogramasa msbajonivelutilizandola APIjava.net=>nivelde transporte=>TCP/UDP.

UNIVERSIDADEDACORUA

CapadeAplicacin (HTTP,ftp,telnet) CapadeTransporte (TCP,UDP) CapadeRed (IP) CapadeEnlace (Ethernet,...)

Octubre2007

LaboratoriodeRedesdeComunicaciones

CapadeTransporte:TCPvsUDP
TCP:TransmissionControlProtocol
Protocoloorientadoaconexin Proveeunflujodebytesfiableentredosordenadores.
Llegadaenorden,correcta,sinperdernada.

UNIVERSIDADEDACORUA

ProtocolosdelniveldeaplicacinqueusanTCP:telnet,http,ftp.

UDP:UserDatagramProtocol
Noorientadoaconexin. Envapaquetesdedatos(datagramas)independientessin garantas. ProtocolosdelniveldeaplicacinqueusanUDP:tftp,ping. Permitebroadcast.
Octubre2007 LaboratoriodeRedesdeComunicaciones 7

Quesunpuerto?

UNIVERSIDADEDACORUA

Unordenadortieneunaovariasconexionesfsicasalared. Atravsdeesasconexionesrecibelosdatosdirigidosalamquina. Cmodeterminaraqueaplicacinenviarlosdatos?Puertos.


TCPyUDPutilizanlospuertosparadirigirlosdatosalaaplicacin correctadeentretodaslasqueseestnejecutandoenlamquina.

LosdatostransmitidosatravsdeInternetcontieneninformacinde direccionamientoqueidentificaalamquinaypuertoalosquevan dirigidos.


LamquinaseidentificaatravsdeunadireccinIPde32bits. Lospuertosseidentificanporunnmerode16bits.

Puertos:
IndependientesparaTCPyUDP. 16bitsRango:0a65535. Reservados:0a1023(wellknownports)
Paraserviciosconocidos:HTTP,FTP, Nodeberanserutilizadosporaplicacionesdeusuario.

Octubre2007

LaboratoriodeRedesdeComunicaciones

TCP

UNIVERSIDADEDACORUA

Unaaplicacinservidoraseregistraenunpuertoconcreto.
Elservidorseregistraenelsistemapararecibirlosdatosdirigidos aesepuerto.

Elclienteseconectaconelservidorusandoesenmerode puerto.
Sloenelestablecimientodelaconexinseprecisala IP+puerto. ElrestodepaquetesTCPslollevanunidentificadordela conexin.

Servidor

p u e r t o

TCP

Cliente

Octubre2007

LaboratoriodeRedesdeComunicaciones

UDP

UNIVERSIDADEDACORUA

Unaaplicacinservidoraseregistraenunpuertoconcreto.
Elservidorseregistraenelsistemapararecibirlosdatosdirigidos aesepuerto.

Elclienteenvadatagramasquecontienenelnmerode puertodeldestinoasociadoalaaplicacinservidora.
UDPenrutahacialaaplicacinadecuada. EncadapaqueteUDPvatodalainformacinnecesariaparaque enrute:IP+puerto
Aplicacin Puerto Aplicacin Puerto UDP #Puerto
Octubre2007

Aplicacin Puerto

Datos

Paquete
10

LaboratoriodeRedesdeComunicaciones

ClasesparaRedesenJDK
Paquetejava.net

UNIVERSIDADEDACORUA

ClasesJavaparacrearprogramasqueutilicenTCPoUDPpara comunicarsesobreInternet. ClasesURL,URLConnection,Socket,ServerSocket


UtilizanTCPparacomunicacionesdered.

ClasesDatagramPacket,DatagramSocket,MulticastSocket
UtilizanUDPparacomunicacionesdered.

Nivelesdecomunicacindered
Bajonivel:Aplicacionescliente/servidorbasadasenprotocolos. Altonivel:Accesoarecursosdered

Octubre2007

LaboratoriodeRedesdeComunicaciones

11

Quesunsocket?

UNIVERSIDADEDACORUA

Esunextremodeunenlacedecomunicacinbidireccional entredosprogramasquesecomunicanporlared.
Unsocketseasociaaunnmerodepuerto.

SeidentificapordireccinIPdelamquina+nmerode puerto. ExistenenTCPyUDP.

Octubre2007

LaboratoriodeRedesdeComunicaciones

12

SocketsTCP(1)
Socketsorientadosaconexin. Elservidorseejecutaenunamquinaycreaunsocket orientadoaconexinligadoaunnmerodepuerto especfico.

UNIVERSIDADEDACORUA

Elservidorespera,escuchandoporesesocket,aquelosclientes haganpeticionesdeconexin.

Elclienteconoce:
Lamquinadondeseestejecutandoelservidor Elpuertodondeelservidorestescuchando.
p u e r Servidor t o
Octubre2007

l i s t e n

Peticinde conexin

p u e r t o

Cliente

LaboratoriodeRedesdeComunicaciones

13

SocketsTCP(2)

UNIVERSIDADEDACORUA

Elclienteenvaunapeticindeconexinalservidor, usandoesamquinaynmeropuerto. Adems,elclientetienequeidentificarseanteelservidor, portantoalclienteseleasignaunpuertoensumquina, queserutilizadoalolargodelaconexin.


Normalmenteestaasignacinlarealizaelsistema.

Sitodovabienelservidoraceptalaconexin.
Elservidorobtieneunnuevosocketasociadoalmismopuerto localqueeloriginal,yquetienecomootroextremodelaconexin ladireccinypuertodelcliente. Esnecesariocrearunnuevosocketparaatenderalcliente,para poderseguirrecibiendopeticionesdeconexinatravsdelsocket original.
Octubre2007 LaboratoriodeRedesdeComunicaciones 14

SocketsTCP(3)

UNIVERSIDADEDACORUA

Enelladocliente,silaconexinesaceptada,seobtieneunsocket conectadoconelservidor. Apartirdeah,clienteyservidorsecomunicanescribiendoyleyendo porsusrespectivossockets.


p u e r Servidor t o l i s t e n p u e r t o

Conexin

Cliente

Clases:
java.net.Socket:Implementaunextremodeunaconexinbidireccional. java.net.ServerSocket:Implementaunsocketquelosservidorespueden utilizarparaescucharyaceptarpeticionesdeclientes.

Octubre2007

LaboratoriodeRedesdeComunicaciones

15

SocketsUDP(1)
SocketsNOorientadosaconexin.
Seenvanyrecibenpaquetesindependientesdeinformacin ClientesyservidoresNOseconectan NOsegarantizalarecepcindelpaquetenielorden.

UNIVERSIDADEDACORUA

Datagrama:
Mensajeindependiente,enviadoatravsdeunaredcuyallegada,tiempo dellegadaycontenidonoestgarantizado.

Elservidorseejecutaenunamquinaycreaunsocketnoorientadoa conexinqueestligadoaunnmerodepuertoespecfico.
Apartirdeahelservidorrecibetodoslosdatosenviadosaesepuerto UDP,leyendoatravsdeesesocket.

Elclienteconoce:
Lamquinadondeseestejecutandoelservidor Elpuertoasociadoalservidor.

Octubre2007

LaboratoriodeRedesdeComunicaciones

16

SocketsUDP(2)

UNIVERSIDADEDACORUA

Elclientecreaunsocketnoorientadoaconexinligadoaunnmero depuertoespecficoyloutilizaparaenviarDatagramasalservidor.
Normalmentelaasignacindelnmerodepuertoenelclientelahaceel sistema. LosDatagramasenviadosdebencontenerladireccinynmerodepuerto delservidoralquevandirigidos.

CuandounservidorrecibeunDatagrama:
Obtieneladireccindelamquinadelclienteysunmerodepuerto. EnvalarespuestaalclientecreandounDatagramadirigidoaesamquina ypuerto.

Clases:
java.net.DatagramSocket java.net.DatagramPacket

Octubre2007

LaboratoriodeRedesdeComunicaciones

17

DireccionesIP
Clasejava.net.InetAddress:
Mtodosestticos:
InetAddressgetByName(Stringhost)
ObtieneladireccinIPdelamquina RecibeelnombredelamquinaosudireccinIPcomocadena.

UNIVERSIDADEDACORUA

InetAddress[]getAllByName(Stringhost)
OtienetodaslasdireccionesIPdeunamquina. RecibeelnombredelamquinaosudireccinIPcomocadena.

InetAddressgetLocalHost():
ObtieneladireccinIPdelamquinaenlaqueseestejecutando.

Mtodo:
publicStringgetHostName()
DevuelveelnombredelamquinacorrespondienteaestaIP.

Octubre2007

LaboratoriodeRedesdeComunicaciones

18

TCPCliente(1)
Operacin:
Crearunsocket Establecerlaconexinconelservidor Intercambiodedatos(segnprotocolo):
Abrirunflujodeentradayotrodesalida Escribiryleerdelosflujos

UNIVERSIDADEDACORUA

Cerrarlosflujos Cerrarelsocket

Clase:java.net.Socket

Octubre2007

LaboratoriodeRedesdeComunicaciones

19

TCPCliente(2)
Creacinyconexindelsocket(java.net.Socket).

UNIVERSIDADEDACORUA

Alllamaralconstructorsecreaelsocketysiseindicaladireccin ypuertodelservidoryaseconectaconlamquinaypuerto indicados. Constructores:


Socket() Socket(InetAddressdir,intpuerto) Socket(InetAddressdir,intpuerto,InetAddressdirLocal,int puertoLocal) Socket(Stringnombre,intpuerto) Socket(Stringnombre,intpuerto,InetAddressdirLocal,int puertoLocal)

Mtodos
voidbind(SocketAddressbindpoint) voidconnect(SocketAddressendpoint) voidconnect(SocketAddressendpoint,inttimeout)
Octubre2007 LaboratoriodeRedesdeComunicaciones 20

TCPCliente(3)
Abrirflujosdedatosdelsocket:
Mtodos:
InputStreamgetInputStream() OutputStreamgetOutputStream()

UNIVERSIDADEDACORUA

Recomendacin(sisetransmiteTEXTO):
Paralaentradadedatos:BufferedReaderInputStreamReader
MtodoreadLine().

Paralasalidadedatos:PrintWriter
Mtodoprintln().

Octubre2007

LaboratoriodeRedesdeComunicaciones

21

TCPCliente(4)
Cierredelosflujosdelecturayescritura:
Mtodo:
voidclose()

UNIVERSIDADEDACORUA

Cierredelsocket:
Mtodo:
voidclose()

Octubre2007

LaboratoriodeRedesdeComunicaciones

22

TCPServidor(1)
Operacin:
Crearunsocketservidor Mientras(durelaejecucindelservidor)
Esperarconexindeuncliente.
Crearunsocketconectadoalcliente. Intercambiodedatos(segnprotocolo).Enotrohilodeejecucin? Abrirunflujodeentradayotrodesalida Leeryescribirdelosflujos Cerrarlosflujos Cerrarelsocket

UNIVERSIDADEDACORUA

Cerrarelsocketservidor

Clases:
java.net.ServerSocket java.net.Socket
Octubre2007 LaboratoriodeRedesdeComunicaciones 23

TCPServidor(2)
Creacindelsocketservidor(java.net.ServerSocket)

UNIVERSIDADEDACORUA

Alllamaralconstructorsecreaelsocketservidorysiseindicael puertoyaseasociaaesepuerto. Constructores:


ServerSocket() ServerSocket(intpuerto) ServerSocket(intpuerto,intbacklog)
backlog:Nmerodemximodeconexionespendientesqueaceptarel socket.

ServerSocket(intpuerto,intbacklog,InetAddressdirIP)
dirIp:Direccinporlaquevaaaceptarconexiones(encasodequela mquinadelservidortengamsdeuna).

Mtodos:
voidbind(SocketAddressendpoint) voidbind(SocketAddressendpoint,intbacklog)
Octubre2007 LaboratoriodeRedesdeComunicaciones 24

TCPServidor(3)
Esperaryaceptarconexiones:
Mtodo:
Socketaccept()
DevuelveunSocketconectadoalclientequerealizlaconexin.

UNIVERSIDADEDACORUA

Abrirunflujodeentradayotrodesalida
demcliente.

Leeryescribirenlosflujos
demcliente.

Octubre2007

LaboratoriodeRedesdeComunicaciones

25

TCPServidor(4)
Cerrarlosflujos
demcliente.

UNIVERSIDADEDACORUA

Cerrarelsocket
demcliente.

Cerrarelsocketservidor.
Mtodo:
voidclose()

Octubre2007

LaboratoriodeRedesdeComunicaciones

26

UDPCliente(1)
Operacin:
Crearunsocketnoorientadoaconexin. Intercambiodedatos(segnprotocolo):
EnviaryrecibirDatagramas

UNIVERSIDADEDACORUA

Cerrarelsocket

Clases:
java.net.DatagramSocket java.net.DatagramPacket

Octubre2007

LaboratoriodeRedesdeComunicaciones

27

UDPCliente(2)
Creacindelsocket(java.net.DatagramSocket)
Constructores:
DatagramSocket()
Normalmenteseutilizaesteenlosclientes

UNIVERSIDADEDACORUA

DatagramSocket(intpuerto) DatagramSocket(intpuerto,InetAddressdirIP)

Intercambiodedatos
Enviar:
voidsend(DatagramPacket)

Recibir:
voidreceive(DatagramPacket)

Establecertimeoutpararecibir.
setSoTimeout(intmilisegundos)

Cierredelsocket:
Mtodo:
voidclose()

Octubre2007

LaboratoriodeRedesdeComunicaciones

28

UDPCliente(3)
Datagramas(java.net.DatagramPacket):
Constructores(paraenviar):

UNIVERSIDADEDACORUA

DatagramPacket(byte[]buf,intlength,InetAddressaddr,intport) DatagramPacket(byte[]buf,intoffset,intlength,InetAddressaddr, intport)


buf:arrayconlosdatosquesevanaenviar offset:desplazamientodentrodelarraydedatosaenviar length:nmerodebytesaenviar addr:direccinIPdeldestino port:nmerodepuertodeldestino

Constructores(pararecibir):
DatagramPacket(byte[]buf,intlength) DatagramPacket(byte[]buf,intoffset,intlength)
buf:arrayparaalmacenarlosdatosquesevanarecibir offset:desplazamientodentrodelarraydedatosarecibir length:nmeromximodebytesquesevanarecibir

Octubre2007

LaboratoriodeRedesdeComunicaciones

29

UDPServidor(1)
Operacin:
Crearunsocketnoorientadoaconexin. Mientras(durelaejecucindelservidor)
Intercambiodedatos(segnprotocolo):
RecibiryenviarDatagramas

UNIVERSIDADEDACORUA

Cerrarelsocket

Clases:
java.net.DatagramSocket java.net.DatagramPacket

Octubre2007

LaboratoriodeRedesdeComunicaciones

30

UDPServidor(2)
Creacindelsocket(java.net.DatagramSocket)
Constructores:
DatagramSocket() DatagramSocket(intpuerto) DatagramSocket(intpuerto,InetAddressdirIP)

UNIVERSIDADEDACORUA

Mtodos:
voidbind(SocketAddressaddr)

Intercambiodedatos
demcliente.

Cierredelsocket
demcliente.
Octubre2007 LaboratoriodeRedesdeComunicaciones 31

LaboratoriodeRedesdeComunicaciones FlujosdedatosenJava
Flujosdedatos Ficheros

UNIVERSIDADEDACORUA

Flujosdedatos:Introduccin
Losprogramasnecesitan:
Recogerinformacindeunafuenteexterna. Enviarinformacinaundestinoexterno.

UNIVERSIDADEDACORUA

Estainformacinpuedeestaren:ficherosendisco,lared, memoria,programas,etc. Ypuedeserdecualquiertipo:objetos,caracteres, imgenes,sonidos,etc.

Octubre2007

LaboratoriodeRedesdeComunicaciones

33

Flujosdedatos:Lectura

UNIVERSIDADEDACORUA

Elprogramaabreelflujo(stream)dedatosenlafuente. Elprogramaleelainformacin.

Octubre2007

LaboratoriodeRedesdeComunicaciones

34

Flujosdedatos:Escritura

UNIVERSIDADEDACORUA

Elprogramaabreunflujo(stream)dedatosconeldestino. Escribelainformacin.

Octubre2007

LaboratoriodeRedesdeComunicaciones

35

Flujosdedatos
Lectura
Abrirelflujodedatos Mientrashay informacin Leerinformacin Cerrarelflujodedatos

UNIVERSIDADEDACORUA

Escritura
Abrirelflujodedatos Mientrashay informacin Escribirinformacin Cerrarelflujodedatos

Octubre2007

LaboratoriodeRedesdeComunicaciones

36

Flujosdedatos:Clases
Paquetejava.io Existen4clasesabstractaspadredelrestode clases:
Flujosdebytes
java.io.OutputStream,java.io.InputStream

UNIVERSIDADEDACORUA

Flujosdecaracteres
java.io.Reader,java.io.Writer
Normalmentesonenvoltoriossobreflujosdebytes.
ElflujodebytesseutilizapararealizarlaE/Sfsica,yelflujode caracteresrealizalaconversinentrecaracteresybytes.

LaplataformaJavaalmacenaloscaracteresutilizandoconvenciones Unicode.
Losflujosdecaracterestraducenentreesteformatointernoyeljuegode caractereslocal.
Octubre2007 LaboratoriodeRedesdeComunicaciones 37

Flujosdebytes.Lectura.
Clasejava.io.InputStream:
LeeBYTESunoaunooenunarray. Mtodos:
intread()
Leeunbyte

UNIVERSIDADEDACORUA

intread(bytebuf[])
Leeunconjuntodebytesylosalmacenaenunarray Devuelveelnmerodebytesledos

intread(bytebuf[],intoffset,intlongitud)
Leeunconjuntodebytesylosalmacenaenunaporcindeun array Devuelveelnmerodebytesledos Devuelven1encasodellegaralfinaldelflujodedatos.

voidclose()
Cierraelflujo
Octubre2007 LaboratoriodeRedesdeComunicaciones 38

Flujosdebytes.Escritura.
Clasejava.io.OutputStream:
EscribeBYTESunoaunooatravsunarray. Mtodos:
voidwrite(intc)
Escribeunbyte

UNIVERSIDADEDACORUA

voidwrite(bytebuf[])
Escribeunarraydebytes

write(bytebuf[],intoffset,intlongitud)
Escribeunaporcindeunarraydebytes

voidclose()
Cierraelflujo

Octubre2007

LaboratoriodeRedesdeComunicaciones

39

Flujosdecaracteres.Lectura.
Clasejava.io.Reader:
LeeCARACTERESunoaunooenunarray. Mtodos:
intread()
Leeuncarcter

UNIVERSIDADEDACORUA

intread(charbuf[])
Leeunconjuntodecaracteresylosalmacenaenunarray Devuelveelnmerodecaracteresledos

intread(charbuf[],intoffset,intlen)
Leeunconjuntodecaracteresylosalmacenaenunaporcinde unarray Devuelveelnmerodecaracteresledos

Devuelven1encasodellegaralfinaldelflujodedatos. voidclose()
Cierraelflujo
Octubre2007 LaboratoriodeRedesdeComunicaciones 40

Flujosdecaracteres.Escritura.
Clasejava.io.Writer:

UNIVERSIDADEDACORUA

EscribeCARACTERESunoaunooatravsunarray. Mtodos:
voidwrite(intc)
Escribeuncarcter

voidwrite(charbuf[])
Escribeunarraydecaracteres

voidwrite(charbuf[],intoffset,intlongitud)
Escribeunaporcindeunarraydecaracteres

voidclose()
Cierraelflujo

Octubre2007

LaboratoriodeRedesdeComunicaciones

41

Flujosdedatosorientadosalneas:Lectura
Clasejava.io.BufferedReader:
Clasetilparalalecturadelneasdetexto. Constructor:
BufferedReader(Readerreader)

UNIVERSIDADEDACORUA

Mtodos:
StringreadLine()
Leeunalneadetexto. Devuelvelacadenaledaonullsisealcanzaelfinaldelflujo.

voidclose()
Cierraelflujo

Octubre2007

LaboratoriodeRedesdeComunicaciones

42

Flujosdedatosorientadosalneas:Escritura
Clasejava.io.PrintWriter:
Clasetilparaescribirlneasdecaracteres. Constructores:
PrintWriter(OutputStreamout) PrintWriter(OutputStreamout,booleanautoFlush) PrintWriter(Writerout) PrintWriter(Writerout,booleanautoFlush)
autoFlushindicasiciertosmtodos(incluidoprintln)provocanunflush delbufferdeescritura(pordefectofalse)

UNIVERSIDADEDACORUA

Mtodos:
voidprintln(Stringx)
Escribelacadenaespecificadamsunfindelnea

voidflush()
Escribeloquehayaenelbufferdeescritura

voidclose()
Cierraelflujo
Octubre2007 LaboratoriodeRedesdeComunicaciones 43

Conversinentreflujosdedatos
Clasejava.io.InputStreamReader:
ClasetilparalaconversindeobjetosInputStreamaReader. HeredadeReader. Constructor:
InputStreamReader(InputStreamin)

UNIVERSIDADEDACORUA

Clasejava.io.OutputStreamWriter:
ClasetilparalaconversindeobjetosOutputStreamaWriter. HeredadeWriter. Constructor:
OutputStreamWriter(OutputStreamout)

Octubre2007

LaboratoriodeRedesdeComunicaciones

44

Ficheros

UNIVERSIDADEDACORUA

Unidaddealmacenamientocontenidaen:discos,cintas, etc. Claseparamanejodeficherosydirectorios:java.io.File Constructores:


File(Fileparent,Stringchild) File(Stringpathname) File(Stringparent,Stringchild)

Octubre2007

LaboratoriodeRedesdeComunicaciones

45

Clasejava.io.File(1)
Mtodos
StringgetName()
Devuelveelnombredelficheroodirectorio

UNIVERSIDADEDACORUA

StringgetParent()
Devuelveelpathdeldirectoriopadreonullsinotiene.

StringgetPath()
Devuelveelpath

StringgetAbsolutePath()
Devuelveelpathabsoluto

longlastModified()
Devuelvelahoradelaltimamodificacin.

longlength()
Devuelveeltamao.

booleancanExecute() booleancanRead() booleancanWrite()


Indicansilaaplicacinpuedeejecutar,leeryescribirenelfichero.
Octubre2007 LaboratoriodeRedesdeComunicaciones 46

Clasejava.io.File(2)
Mtodos
booleandelete()
Borraelficheroodirectorio

UNIVERSIDADEDACORUA

booleanrenameTo(Filedest)
Renombraelficheroodirectorio

booleanexists()
Indicasiexisteunficheroodirectorioconesenombre

booleanisDirectory()
Indicasisetratadeundirectorio.

booleanisFile()
Indicasisetratadeunfichero

booleancreateNewFile()
Creaunficherovacoconestenombresinoexistaya.

booleanmkdir()
Creaundirectorioconestenombre

booleanmkdirs()
Creaundirectorioconestenombrecreandotodoslosdirectoriospadrequeseanecesario

String[]list()
Obtieneunalistadelosficherosydirectorioscontenidosenestedirectorio.

Octubre2007

LaboratoriodeRedesdeComunicaciones

47

Ficheros.Flujosdebytes:Lectura
Clasejava.io.FileInputStream:
LeeBYTESdeunfichero.Accesosecuencial.

UNIVERSIDADEDACORUA

AperturadeunFileInputStream: Atravsdelconstructor:
FileInputStream(Filefile) FilemiFichero=newFile("/etc/ejemplo"); FileInputStreamfis=newFileInputStream(miFichero); FileInputStream(Stringname) FileInputStreamfis=newFileInputStream("/etc/ejemplo");

Lecturaycierre:MismosmtodosqueInputStream.
Octubre2007 LaboratoriodeRedesdeComunicaciones 48

Ficheros.Flujosdebytes:Escritura
Clasejava.io.FileOutputStream:
EscribeBYTESenunfichero.

UNIVERSIDADEDACORUA

AperturadeunFileOutputStream: Atravsdelconstructor:
FileOutputStream(Filefile) FileOutputStream(Filefile,booleanappend) FileOutputStream(Stringname) FileOutputStream(Stringname,booleanappend)
appendindicasiloqueseescribeseaadealfinaldelfichero

Escrituraycierre:MismosmtodosqueOutputStream.
Octubre2007 LaboratoriodeRedesdeComunicaciones 49

Ficheros.Flujosdecaracteres:Lectura
Clasejava.io.FileReader:
LeeCARACTERESdeunfichero.Accesosecuencial.

UNIVERSIDADEDACORUA

AperturadeunFileReader: Atravsdelconstructor:
FileReader(Filefile) FileReader(Stringname)

Lecturaycierre:MismosmtodosqueReader.

Octubre2007

LaboratoriodeRedesdeComunicaciones

50

Ficheros.Flujosdecaracteres:Escritura
Clasejava.io.FileWriter:
EscribeCARACTERESenunfichero.

UNIVERSIDADEDACORUA

AperturadeunFileWriter: Atravsdelconstructor:
FileWriter(Filefile) FileWriter(Filefile,booleanappend) FileWriter(Stringname) FileWriter(Stringname,booleanappend)
appendindicasiloqueseescribeseaadealfinaldelfichero

Escrituraycierre:MismosmtodosqueWriter.
Octubre2007 LaboratoriodeRedesdeComunicaciones 51

StreamsdeE/Sestndar
Entradaestndar.
Paraleerdatosintroducidosporelusuario. System.in DetipoInputStream.

UNIVERSIDADEDACORUA

Salidaestndarysalidadeerror.
Paramostrarinformacinymensajesdeerroralusuario. System.out,System.err DetipoPrintStream.
Desciendedejava.io.OutputStream Tienemtodosparaescribircaracteres(print,println)queaceptan parmetrosdediferentestipos(Object,String,char[],char,int,long, float,double,yboolean) Tienemtodosparaescribirbytes:mtodoswritedeOutputStream.
Octubre2007 LaboratoriodeRedesdeComunicaciones 52

LaboratoriodeRedesdeComunicaciones ProgramacinConcurrente
Threads

UNIVERSIDADEDACORUA

ProgramacinMultithread

UNIVERSIDADEDACORUA

Laprogramacinmultihilopermiterealizarmuchas actividadessimultneasenunprograma.Loshilosaveces llamados,procesosligeros,ohilosdeejecucinson ejecucionesconcurrentesdeunprogramadondese compartendiversosrecursosentrelosdistintosthreads.Al estarestoshilosconstruidosenelmismolenguaje,sonms fcilesdeusarquesushomlogosenCoC++. Elbeneficiodesermultihiloconsisteenunmejor rendimientointeractivoyunamayorfacilidadpara modelarprocesosconcurrentes(comounservidoren Internetquedebeatenderamltiplesclientesdeforma simultnea).

Octubre2007

LaboratoriodeRedesdeComunicaciones

54

Threads:Introduccin(I)

UNIVERSIDADEDACORUA

Normalmentelosprogramasestnformadosporunnico hilodeejecucinysucomportamientoessecuencial, tienen:


Unpuntodeinicio Unasecuenciadeejecucin Unfinal

Cuandoenunprogramasequiererealizarmsdeunatarea simultneamenteseutilizantcnicasdeejecucin concurrente,quepermitenquediversospuntosdel programaseestnejecutandoalavez. Existendosaproximacionesparaejecutartareasdeforma concurrenteenunprograma:


Procesos. Threads.
Octubre2007 LaboratoriodeRedesdeComunicaciones 55

Threads:Introduccin(II)
ThreadsvsProcesos

UNIVERSIDADEDACORUA

Ambossonflujossecuencialesdecontroldentrodeunprograma. Todoslosthreadsdentrodeunprocesocompartenrecursoscomola memoria.(Unobjetocreadoenunthreadesvisibledesdeotro). Losprocesosnocompartenrecursosentres.(Unobjetocreadoenun procesonoesvisibledesdeotroprocesodistinto).

Alcompartirrecursos,losthreadssecreanmsrpidoquelos procesosyloscambiosdecontextoentrethreadssonmsbaratos.Esta ventajadelosthreadsvaramuchosegnelSO,siendomsgrandeen Windows(dondelacreacindeprocesosesmuycostosa). Comocontrapartida,elmayoraislamientoqueproporcionanlos procesoshacemsfcilevitarproblemasquesurgendelaejecucin concurrentesobrelosmismosrecursos. Ambasaproximacionessepuedencombinarenunmismoprograma, quepuedetenervariosprocesos,ycadaunodeellosconvarios threadssimultneos.
LaboratoriodeRedesdeComunicaciones 56

Octubre2007

Threads:Introduccin(III)
Unprogramaconcurrenteejecutamltiplesthreads simultneamente,cadaunorealizandodiferentestareas.

UNIVERSIDADEDACORUA

Octubre2007

LaboratoriodeRedesdeComunicaciones

57

Threads:Introduccin(IV)
Javaesmultithread

UNIVERSIDADEDACORUA

Permitelarealizacindeprogramasdeflujomltiple:
Programasqueejecutansimultneamentemltiplestareas. Porejemplo:
NavegadorquedescargapginasWeb:unthreadparalapgina HTML,otroparacadaimagen,etc.

LasaplicacionesJavabsicasestnformadasnormalmenteporun nicoprocesoconunnicothread,queinvocaalmtodomain delaclasequeseejecuta.

Octubre2007

LaboratoriodeRedesdeComunicaciones

58

Threads:Introduccin(V)
Razonesparautilizarmultithreading

UNIVERSIDADEDACORUA

Paralograrconcurrenciaenunprograma(hacervariascosasala vez,cuandounastareasnodependendeotras). Paraeliminarlostiemposdeesperaalosusuariosdeunprograma


Permitenhacerotrotrabajomientraselprogramaestbloqueado haciendoalgo.

Serviravariosclientesenparalelo,sinquetenganqueesperara queterminenotrosparaseratendidos. ParaaprovecharlascapacidadesmultiprocesodelasCPUs actuales(Multithreading,Multicore)yconseguirunamejoradela eficiencia.

Ejemplos:
Servidoresqueaceptanconexionesdemltiplesclientes (ServidoresWeb,FTP,correo,) Almacenarunarchivoendisco. Mostrarunabarradeprogresodeunaoperacindeunaaplicacin.
Octubre2007 LaboratoriodeRedesdeComunicaciones 59

Threads:Java(I)
Javaparalacreacindethreadsdisponededos mecanismos:
Laclasejava.lang.Thread
Seutilizacuandosepuedeheredardirectamente.

UNIVERSIDADEDACORUA

Lainterfazjava.lang.Runnable
Seutilizaenloscasosdequeseanecesariolaherenciamltiple
(porejemplocuandounaclaseyaheredadeotra,comounApplet).

NOTA:
MtodoestticoThread.sleep(intmilisegs):duermeunprocesoo unthreadduranteeltiempoespecificado.

Octubre2007

LaboratoriodeRedesdeComunicaciones

60

Threads:Java(II)
HeredardelaclaseThread. Definirunconstructor. Sobrescribirelmtodorun():
publicvoidrun()
}

UNIVERSIDADEDACORUA

Mtodo1:Paracrearunaclasequeseaunthread(unhilo deejecucinindependiente):
class HijoThread extends Thread { HijoThread() { // Inicializacin } public void run() { // Tarea a ejecutar en el thread ... }

Elprogramaprincipal:
Creaunainstanciadelanuevaclase:
HijoThreadt=newHijoThread();

Inicialaejecucin:
t.start();

Octubre2007

LaboratoriodeRedesdeComunicaciones

61

Threads:Java(III)
Mtodo2:Encasodeutilizarherenciamltiple:
DeclararunaclasequeimplementelainterfazRunnable. class HijoRunnable implements Defineunconstructor. HijoRunnable() { // Inicializacin Sobrescribirelmtodrun().
publicvoidrun()
}

UNIVERSIDADEDACORUA

Runnable{

public void run() { // Tarea a ejecutar en el thread ... } }

Elprogramaprincipal:

Creaunainstanciadelanuevaclase:
HijoRunnablerunnable=newHijoRunnable();

Creaunthreadpasndolecomoparmetrolanuevaclase:
Threadt=newThread(runnable);

Inicialaejecucindelthread:
t.start();
Octubre2007 LaboratoriodeRedesdeComunicaciones 62

Msinformacin
http://java.sun.com/docs/books/tutorial/
http://java.sun.com/docs/books/tutorial/reallybigindex.html

UNIVERSIDADEDACORUA

ProgramacinconSockets
http://java.sun.com/docs/books/tutorial/networking/sockets/index.html (Sockets) http://java.sun.com/docs/books/tutorial/networking/datagrams/index.html (Datagramas)

Flujosdedatos
http://java.sun.com/docs/books/tutorial/essential/io/index.html http://java.sun.com/docs/books/tutorial/essential/io/streams.html (Streams) http://java.sun.com/docs/books/tutorial/essential/io/fileio.html(Files)

Programacinconcurrente
http://java.sun.com/docs/books/tutorial/essential/concurrency/threads.html (Threads)

Octubre2007

LaboratoriodeRedesdeComunicaciones

63

También podría gustarte