🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #25941

Re: Socket y ServerSocket

#25941
From: Guillermo Rodriguez Garcia
Date: Tue, 16 Feb 1999 00:00
114 lines
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-mail
References: <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