Download sockets - WordPress.com
Document related concepts
no text concepts found
Transcript
Alumno: César Eduardo Guerra González Reporte: SOCKETS OBJETIVO: Conocer el funcionamiento de los sockets y la clase de Java que permite implementarlos. Los sockets son un sistema de comunicación entre procesos de diferentes máquinas de una red. Más exactamente, un socket es un punto de comunicación por el cual un proceso puede emitir o recibir información. Los sockets han de ser capaces de utilizar el protocolo de streams TCP (Transfer Control Protocol) y el de datagramas UDP (User Datagram Protocol). Utilizan una serie de primitivas para establecer el punto de comunicación, para conectarse a una máquina remota en un determinado puerto que esté disponible, para escuchar en él, para leer o escribir y publicar información en él, y finalmente para desconectarse. Con todas primitivas se puede crear un sistema de diálogo muy completo. Existen 3 tipos de sockets: 1. Sockets Stream (TCP, Transport Control Protocol) Son un servicio orientado a conexión donde los datos se transfieren sin encuadrarlos en registros o bloques. Si se rompe la conexión entre los procesos, éstos serán informados. El protocolo de comunicaciones con streams es un protocolo orientado a conexión, ya que para establecer una comunicación utilizando el protocolo TCP, hay que establecer en primer lugar una conexión entre un par de sockets. 2. Sockets Datagrama (UDP, User Datagram Protocol) Son un servicio de transporte sin conexión. Son más eficientes que TCP, pero no está garantizada la fiabilidad. Los datos se envían y reciben en paquetes, cuya entrega no está garantizada. Los paquetes pueden ser duplicados, perdidos o llegar en un orden diferente al que se envió. El protocolo de comunicaciones con datagramas es un protocolo sin conexión, es decir, cada vez que se envíen datagramas es necesario enviar el descriptor del socket local y la dirección del socket que debe recibir el datagrama. Como se puede ver, hay que enviar datos adicionales cada vez que se realice una comunicación. 3. Sockets Raw Son sockets que dan acceso directo a la capa de software de red subyacente o a protocolos de más bajo nivel. Se utilizan sobre todo para la depuración del código de los protocolos. CODIGOS: /*Como obtener la direccion IP de un nombre de dominio*/ import java.net.*; public class obtenerIPdeDNS{ public static void main(String args[]) { InetAddress javasoft = null; try{ javasoft = InetAddress.getByName("www.javasoft.com"); } catch (UnknownHostException e) { System.out.println(javasoft); } System.out.println(javasoft); } } Alumno: César Eduardo Guerra González Reporte: SOCKETS /*Como enviar correo electronico desde una aplicacion en java*/ import java.io.*; import java.net.*; public class pruebaCorreoJava{ static PrintStream ps = null; //envio de mensajes static DataInputStream dis = null; //recepción de mensajes public static void enviar(String str) throws IOException { ps.println(str); //enviar un texto SMTP ps.flush(); //descarga el texto System.out.println("Java envió" + str); } public static void recibir() throws IOException { String readstr = dis.readLine(); //obtener la respuesta SMTP System.out.println("respuesta SMTP:" + readstr); } public static void main(String args[]) { String HELO = "HELO"; String MAIL_FROM = "MAIL_FROM: remitente@correo.com.mx"; String RCTP_TO = "RCTP_TO: receptor@correo.com.mx"; String DATA = "DATA"; //inicio del mensaje String ASUNTO = "Subject: Java es excelente!\n"; //Nota: "r\n.r\n" indica el final del mensaje String MENSAJE = "Java envió esto!r\n.r\n"; Socket smtp = null; //Socket de SMTP try{ //Nota: 25 es el número de puerto SMTP predeterminado smtp = new Socket("smtp.servidor.com.mx",25); OutputStream os = smtp.getOutputStream(); ps = new PrintStream(os); InputStream is = smtp.getInputStream(); dis = new DataInputStream(is); } catch (IOException e) { System.out.println("Error al conectar:" + e); } try{ //enviar el HELO String loc = InetAddress.getLocalHost().getHostName(); enviar(HELO + loc); recibir(); //obtener la respuesta SMTP enviar(MAIL_FROM); //enviar el remitente recibir(); //obtener la respuesta SMTP enviar(RCTP_TO); //enviar el receptor recibir(); //obtener la respuesta SMTP enviar(DATA); //enviar el inicio de mensaje recibir(); //obtener la respuesta SMTP enviar(ASUNTO); //enviar el asunto recibir(); //obtener la respuesta SMTP enviar(MENSAJE); //enviar el contenido del mensaje recibir(); //obtener la respuesta SMTP smtp.close(); //cerrar la conexión } catch (IOException e) { System.out.println("Error al enviar: " + e); } System.out.println("Correo enviado!"); } } Alumno: César Eduardo Guerra González Reporte: SOCKETS /*Como leer un archivo de texto y uno de imagen(GIF)*/ import java.applet.*; import java.net.*; import java.io.*; import java.awt.*; import java.awt.image.*; public class pruebaGetContent extends Applet{ String cadena; Image imagen; public void init() { try{ //leer un archivo de texto URL arch_texto = new URL(getDocumentBase(), "simple.texto"); cadena = (String) arch_texto.getContent(); //caargar un archivo grafico URL u = new URL(getDocumentBase(), "simple.gif"); imagen = this.createImage((ImageProducer) u.getContent()); } catch (MalformedURLException e) { System.out.println("Error:" + e.getMessage()); } catch (IOException e) { System.out.println("Error:" + e.getMessage()); } repaint(); } public void paint(Graphics g) { g.drawImage(imagen, 0, 0, this); g.drawString(cadena, 75,75); } } /*Como obtener el URL de la pagina de HTML de un applet*/ import java.applet.*; import java.net.*; import java.awt.*; public class pruebaGetDocumentBase extends Applet{ public void init() { URL html = getDocumentBase(); System.out.println(html);; } } /*Como obtener la direccion IP local*/ import java.net.*; public class pruebaGetLocalHost{ public static void main(String args[]) { InetAddress miDireccionIP = null; try{ miDireccionIP = InetAddress.getLocalHost(); } catch(UnknownHostException e){} System.out.println(miDireccionIP); } } Alumno: César Eduardo Guerra González Reporte: SOCKETS /*Como leer un archivo a traves d Internet*/ import java.net.*; import java.io.*; public class pruebaLeerURL{ public static void main(String args[]) { try{ URL javasoft = null; DataInputStream dis = null; javasoft = new URL("http://www.javasoft.com"); dis = new DataInputStream(javasoft.openStream()); String line = dis.readLine(); while (line != null) { System.out.println(line); line = dis.readLine(); } } catch (IOException e) { System.out.println("Error" + e.getMessage()); } } } CONCLUSIÓN: El paquete java.net ofrece un conjunto de clases que permiten utilizar los URLs (Uniform Resource Locators). Un URL es una dirección electrónica que permite encontrar una información en Internet especificando: El nombre del protocolo que permitirá leer la información. Por ejemplo HTTP. El nombre del servidor que proporciona la información. Por ejemplo sunsite.unc.edu o bien una dirección IP directamente. El nombre del fichero en el servidor. Por ejemplo /Javafaq/Javafaq.htm. REFLEXIÓN: Los ejemplos demuestran la potencia y la sencillez de sus clases para la implementación de los sockets. BIBLIOGRAFIA: Manual programación concurrente y paralela, capitulo 5 SOCKETS.