Sockets en Java
Sockets en Java
Manual de Java
Mapa Web
Método CrearServidor
import java.net.*;
import java.io.*;
import java.util.*;
try
{
conexion=new Socket
(InetAddress.getByName ("http://localhost/index.html"), 80);
System.out.println("Conectando");
/*Enviamos lo que envía el navegador Internet Explorer al pedir
una página*/
peticion="GET /index.html HTTP/1.1\n";
peticion+="Accept: */*\n";
peticion+="Accept-Language: es\n";
peticion+="Accept-Encoding: gzip, deflate\n";
peticion+="User-Agent: Mozilla/4.0 (compatible; MSIE 5.01;
Windows NT)\n";
peticion+="Host: 127.0.0.1\n";
peticion+="Connection: Keep-Alive\n\n";
salida=new DataOutputStream(conexion.getOutputStream());
salida.write(peticion.getBytes());
//Vemos lo que nos envía el Servidor
entrada=new DataInputStream(conexion.getInputStream());
try
{
while ((leido=entrada.read(datosBytes,0,256))!=1)
if (leido>0)
System.out.println (new String(datosBytes,0,(leido-1)));
}
catch (EOFException e) {}
conexion.close();
}
catch (IOException e)
{
System.out.println(e.toString());
System.out.println("Error al conectar");
}
}
try
{
//Creamos un servidor
ServerSocket conexion=new
ServerSocket(80,2,InetAddress.getByName("127.0.0.1"));
DataInputStream entrada=null;
DataOutputStream salida=null;
String cad="",body="",respuesta="";
byte bytedata[]=new byte[256];
while (true)
{
++cliente;
Socket conex=conexion.accept();
entrada=new DataInputStream(conex.getInputStream());
System.out.println("Cliente num "+Integer.toString(cliente));
InetAddress direc=conex.getInetAddress();
System.out.println ("Dirección de
llamada"+direc.getHostAddress());
cad="";
leido=entrada.read(bytedata);
if (leido>0)
cad=new String(bytedata,0,(leido-1));
//Sacamos lo que hemos recibido desde el cliente
System.out.println("Recibido desde cliente");
System.out.println(cad);
salida=new DataOutputStream(conex.getOutputStream());
body+="<html>\n";
body+="<body>\n";
body+="<h1>Hola que tal!</h1>\n";
body+="<image src='barra.gif'>\n";
body+="</body>\n";
body+="</html>\n";
if (cad.indexOf("barra.gif")>=0)
{
respuesta="HTTP/1.0 200 OK\n";
respuesta+="Date: Mon, 5 Nov 2001 23:59:59GMT\n";
respuesta+="Content-Type: image/gif\n";
respuesta+="Content-Length: 112\n\n";
//Hay que añadir la imagen
//Escribimos la respuesta al cliente
salida.write(respuesta.getBytes());
salida.flush();
try
{
FileInputStream
imagen=new FileInputStream("barra.gif");
while((leido=imagen.read(bytedata,0,256))!=-1)
salida.write(bytedata,0,leido);
salida.flush();
}
catch (IOException e)
{
}
}
else if (cad.indexOf("hola.html")>=0)
{
respuesta="HTTP/1.0 200 OK\n";
respuesta+="Date: Mon, 5 Nov 2001 23:59:59 GMT\n";
respuesta+="Content-Type: text/html\n";
respuesta+="Content-
Length:"+Integer.toString(body.length())+"\n\n";
respuesta+=body;
//Escribimos la respuesta al cliente
salida.writeBytes(respuesta);
salida.flush();
}
else
{
respuesta="HTTP/1.0 404 Error no encontrado\n";
respuesta+="Date: Mon, 5 Nov 2001 23:59:59 GMT\n";
respuesta+="Content-Type: text/html\n";
respuesta+="Content- Length:"+Integer.toString(
body.length())+"\n\n";
respuesta+="No se ha encontrado el documento";
//Escribimos la respuesta al cliente
salida.writeBytes(respuesta);
salida.flush();
}
//Cerramos el Socket
conex.close();
}
}
catch (IOException e)
{
System.out.println(e.toString());
System.out.println("Error al conectar");
}
}
public static void main(String[] args)
{
Comunicacion Comuc =new Comunicacion();
Comuc.CrearServidor();
//Comuc.CrearCliente();
//Comuc.pruebaURL();
}
}
A partir del ejemplo expuesto debe ser el lector el que desarrolle los
ejemplos y que vea cuales son los métodos de las clases y como se
comportan en realidad. También se recomienda ver la clase URL que
permite la conexión a través de diferentes protocolos (http, ftp, etc)
especificando la dirección URL de un recurso.