Servidor TCP

Ir abajo

Servidor TCP

Mensaje  Admin (Viruz) el Mar Ene 08, 2013 2:27 am

Antes de ver el siguiente tema se debe conocer que es el Protocolo de Control de Transmisión (TCP), para ello deberíamos meternos al tema de la capa OSI el cual extenderíamos un poco mas el tema pero lo abreviaré para lo que se pretende llegar en esta entrada, como apertura tengo el siguiente significado:
Es un protocolo confiable, orientado a la conexión, que permite que un flujo de bytes que se origina en una máquina se entregue sin errores en cualquier otra máquina en la InterRed.
Ahora las siguientes definiciones también son muy importantes y se deben de tener en cuenta ya que se utilizarán a lo largo del programa:

  • Puertos: Es un punto de conexión entre protocolos de un mismo tipo. Por ejemplo:
    • Puerto 80 - Protocolo HTTP.
    • Puerto 23 - Protocolo POP3.
  • Cliente: Es aquella que solicita información a otra.
  • Servidor: Es aquella que tiene la información solicitada.
  • Socket: Designa un concepto abstracto por el cual dos programas (posiblemente situados en computadoras distintas) pueden intercambiar cualquier flujo de datos, generalmente de manera fiable y ordenada.
Este último punto se debe de tener muy claro el concepto y bueno ahora si vamos a empezar nuestro programa pero para entenderlo mejor e ir explicando lo haré por partes.

Lo que se necesita conocer
¿Como funciona el programa?

1. Empezando por el servidor se importan 2 clases ServerSocket y Socket ahora en constructor de la clase se pasará como parámetro el puerto que abriremos el envió y recepción de información y junto con el el llenado de un arreglo de String.

/**
*
* @author Jesus Ivan
*/
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class ServidorTCP {
private int puerto;
private ServerSocket servidor; //Servidor
private Socket conexion; //Cliente
String[] cadena;

/* Crea nuevas instancias de ServidorTcp*/
public ServidorTCP(int puerto) {
this.puerto = puerto;
cadena = new String[] {"El conocimiento es libre.",
"Somos Anónimos",
"Somos Legión",
"No perdonamos",
"No olvidamos",
"Viruz Blog"
};
}

2. Ahora en el programa existen 2 métodos el primero será el que inicie la conexión y este tendrá el método accept() el cual esta a la espera de una conexión que se realiza la toma y la acepta.

public void iniciarConexion() {
try {
//La oreja del servidor estara pegada al (puerto).
servidor = new ServerSocket(puerto);
System.out.println("Espera un Cliente");
/*.accept() es para inicializar el Server al puerto.
Espera aque un cliente Llegue (Mientras imprimira Espera un Cliente)*/
conexion = servidor.accept();
System.out.println("¡¡¡Un Cliente llego!!!");
} catch (IOException e) {
System.out.println("Erros de Conexion");
System.exit(0);
}
}

3. Se utilizan los flujos de entrada y salida BufferedReader y BufferedWriter y y a lo último se utilizan los métodos getInputStream() y getOutputStream() los cuales devuelven un flujo de entrada y salida para la conexión.

public void comunicarConCliente() {
//Como se Ocupan Flujos se Necesita try{} catch(){}.
try {
//Flujo de entrada desde el cliente.
BufferedReader entrada = new BufferedReader(
new InputStreamReader(conexion.getInputStream()));
//Flujo de salida hacia el cliente.
BufferedWriter salida = new BufferedWriter(
new OutputStreamWriter(
conexion.getOutputStream()));

//Lee una peticion del cliente.
String lectura = entrada.readLine();
System.out.println("El cliente es: "+ lectura);

4. Mediante un ciclo for() se mandará el texto que se almacena en el arreglo con el método write() y con el método flush() libera el flujo (no espera que se llene la memoria), una vez vaciado todo el arreglo se agrega otro mensaje que indica que finaliza la conexión y se cierran los 2 flujos junto con la conexión Socket con el método close().

//Enviar informacion al cliente.
for (int i=0; i<cadena.length; i++) {
//"\n" salto de Linea.
salida.write(cadena[i]+"\n");
//.flush Se libera el flujo(No espera que se llene la Antememoria).
salida.flush();
}
//Agregamos otro String al Socket.
salida.write("Conexion finalizada por el servidor\n");
salida.flush();
salida.close();
entrada.close();
conexion.close();

} catch (IOException e) {
System.out.println("Error de conexion");
}

}
}

5. Ya en la clase main se pasa el número de puerto que se inicializa junto con los métodos.

/**
*
* @author Jesus Ivan
*/
public class Servidor {
public static void main(String [] args) {
//Escucha en el puerto 3000.
ServidorTCP t = new ServidorTCP(3000);
//iniciamos la conexion
t.iniciarConexion();
// Y nos comunicamos con el cliente.
t.comunicarConCliente();
}
}

Descarga el código
[Tienes que estar registrado y conectado para ver este vínculo]
Autor: Viruz study
Enlace:[Tienes que estar registrado y conectado para ver este vínculo]

_________________
[Tienes que estar registrado y conectado para ver esa imagen]
avatar
Admin (Viruz)
Admin

Mensajes : 148
Fecha de inscripción : 23/09/2012
Edad : 30
Localización : Desktop

http://viruz.foroactivo.mx

Volver arriba Ir abajo

Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.