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: [email protected]";
String RCTP_TO = "RCTP_TO: [email protected]";
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.