Article View: es.comp.lenguajes.java
Article #25941Re: Socket y ServerSocket
From: Guillermo Rodriguez Garcia
Date: Tue, 16 Feb 1999 00:00
Date: Tue, 16 Feb 1999 00:00
114 lines
3473 bytes
3473 bytes
El d�a Mon, 15 Feb 1999 16:30:56 +0000, Enrique Garc�a Garc�a
<egarcia@rufo.tid.es> escribi�:
>Alguien seria tan amable de darme una peque�a explicacion de en que se
>parecen, en que se diferencian?
Bueno, si es peque�a...
El ServerSocket te sirve para dejar un puerto permanentemente como
servidor para un cierto servicio (valga la redundancia), y el Socket
para conectar clientes a ese servidor. Un ejemplo t�pico: el servidor
de eco. Con ServerSocket cuelgas el servidor del puerto TCP que te de
la gana (creo que el est�ndar para el eco es el 7) y en un bucle vas
aceptando clientes con accept() que te devuelve cada vez un nuevo
objeto Socket correspondiente a la conexi�n del nuevo cliente. Ahora
lo propio ser�a lanzar un thread que se encargue de ese cliente en
particular, y seguir en el bucle aceptando clientes nuevos.
Ejemplo (muy simplificado):
=== Empieza aqui ===
ServerSocket servidor = null;
Socket socket;
final int puerto = 7;
// Inicializar el socket del servidor y ponerlo en listen
// (apertura pasiva)
//
try
{
servidor = new ServerSocket(puerto);
System.out.println("Servidor instalado en puerto: " + puerto);
}
catch (Exception e)
{
System.err.println("Error en listen; puerto: " + puerto);
System.exit(-1);
}
// Para cada conexion crear y lanzar un nuevo thread
// de tipo ThreadServidor, en el cual haces lo que te
// de la gana (eco de lo que recibes, o lo que sea)
//
try
{
while (true)
{
socket = servidor.accept();
new ThreadServidor(socket).start();
System.out.println("Nueva conexion. Socket: " + socket);
}
}
catch (Exception e)
{
System.out.println("Excepcion en servidor: " + e);
}
=== Acaba aqui ===
En cuanto al cliente, para conectarte haces esto:
=== Empieza aqui ===
Socket socket = null;
final int puerto = 7;
final String servidor = "localhost";
// Conexion al servidor
try
{
socket = new Socket(servidor, puerto);
System.out.println("�Conectado!. Socket: " + socket);
}
catch (Exception e)
{
System.err.println("Error: no se pudo realizar la conexion");
System.exit(-1);
}
// Bucle principal (procesado de datos)
// Aqui haces lo que te de la gana, como por ejemplo mandar
// la informacion de linea en linea al servidor, recibir el eco y
// escribirlo por pantalla.
//
try
{
// Procesado
(...)
// Cuando decidas salir:
socket.close();
}
catch (Exception e)
{
System.err.println("Error: conexion perdida");
System.exit(-1);
}
=== Acaba aqui ===
As� que ya ves, ServerSocket te reserva un puerto para un determinado
servicio, mientras que con Socket gestionas cada una de las conexiones
que se realizan.
>
>Gracias.
De nada. Dimelo si necesitas m�s informaci�n.
Salu2: GUILLE
----
Guillermo Rodriguez Garcia
<XXguille@XXiies.XXes> (ya sabes :-)
Technical Details
Message-ID:
<36cb79f0.1400460@noticias.iies.es>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<36C84BC0.42635E1A@rufo.tid.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,d8566ded2c38a3a X-Google-Attributes: gid1116f3,public From: XXguille@XXiies.XXes (Guillermo Rodriguez Garcia) Subject: Re: Socket y ServerSocket Date: 1999/02/16 Message-ID: <36cb79f0.1400460@noticias.iies.es> X-Deja-AN: 445029823 Content-Transfer-Encoding: 8bit References: <36C84BC0.42635E1A@rufo.tid.es> Content-Type: text/plain; charset=ISO-8859-1 Organization: Telefonica Transmision de Datos Mime-Version: 1.0 Newsgroups: es.comp.lenguajes.java