19
Mar
11

Sockets en java

Hola a los que estén comenzando con esto de comunicar 2 aplicaciones, o hacer su propia aplicación servidor y su propia aplicación cliente así queda fácil.

la forma mas básica de conectar dos aplicativos es por medio de sockets, así estos son las base de todas las comunicaciones por redes y partiendo de hay son la capa más inferior en todas las comunicaciones, o sea RMI, DCOM, COM, Corba, Internet, Web Services.

he realizado un pequeño ejemplo, por pequeño practico.

los sockets abren un flujo de datos de intercambio bi-direccional, podemos tanto como escribir en el cliente o en servidor o realizar ambas operaciones (lo más común).

Este ejemplo, se divide en 2 partes un cliente y un servidor el cliente recoge una cadena la envía al servidor el servidor los convierte a letra capital y retorna el dato al cliente el cliente muestra la cadena retornada por el servidor y pare de contar

Cliente ClienteSocket.java

import java.io.*;
import java.net.*;

public class ClienteSocket {

	//dirección IP del servidor
	static final String HOST = "localhost";
	//puerto habilitado en el servidor
	static final int PUERTO=5000;
	//flujo de entrada de datos
	private DataInputStream dis;
	//flujo de salida de datos
	private	DataOutputStream dos;

	public ClienteSocket(){

		try{

			//lector del buffer(java de parbulito)
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			//conectamos en el servidor
			Socket skCliente = new Socket( HOST , PUERTO );
			//obtenemos los flujos de entrada y salida del servidor
            OutputStream os = skCliente.getOutputStream();
			InputStream is = skCliente.getInputStream();

			dis = new DataInputStream( is );
			dos= new DataOutputStream( os );
			System.out.println("DIGITE exit O EXIT PARA SALIR");

			while(true){
				System.out.print("DIGITE CUALQUIER COSA: ");
				//leemos la linea recién digitada
				String data=br.readLine();
				//enviamos el dato al servidor
				dos.writeUTF(data);
				//leemos la respuesta del servidor
				data=dis.readUTF();
				//mostramos la respuesta del servidor
				System.out.println(data);
				if(data.matches("EXIT")){
					System.out.println("CERRANDO..");
					break;
				}
				System.out.println("\n");
			}
			//cerramos la conexión con el servidor
			skCliente.close();
		} catch( Exception e ) {
			System.out.println("Error...\n" +e.getMessage() );
		}
	}

	public static void main( String[] arg ) {
		new ClienteSocket();
	}
}

Servidor ServidorSocket.java

import java.io.* ;
import java.net.* ;

public class ServidorSocket {
	//puerto habilitado para recibir las conexiones
	static final int PUERTO=5000;
	//flujos de entrada y salido
	private DataInputStream dis;
	private	DataOutputStream dos;

	public ServidorSocket(){
		try {
			//iniciamos el servidor
			ServerSocket skServidor = new ServerSocket( PUERTO );

			System.out.println("SERVIDOR INICIADO EN EL PUERTO:"+PUERTO);
			//aceptamos la conexion del cliente
			Socket skCliente = skServidor.accept();
			//optenemos los flujos de entrada y salida para el cliente
			OutputStream os = skCliente.getOutputStream();
			InputStream is = skCliente.getInputStream();

			dis = new DataInputStream( is );
			dos= new DataOutputStream( os );

			while(true){
			//while(true) mala practica
			//obtenemos el dato enviado por el cliente
	            String data=dis.readUTF();
			//lo convertimos a letra capital
	            data=data.toUpperCase();
			//enviamos el dato enviado por el cliente
				dos.writeUTF(data);

				if(data.matches("EXIT")){
					System.out.println("SALIENDO...");
					break;
				}
			}
			//cerramos comunicacion con el cliente
			skCliente.close();
		} catch( Exception e ) {
			System.out.println( e.getMessage() );
		}
	}

	public static void main( String[] arg ) {
		new ServidorSocket();
	}
}

2 Responses to “Sockets en java”


  1. 1 antonio
    diciembre 28, 2011 a las 2:23 pm

    oye carnal esta muy explicado tu post pero mira mi duda es la siguiente pon que ya tengo un chat echo ya corre local y todo en una red privada funciona perfectamente el punto es quiero ponerlo en internet como le ago tengo que meterlo en un servidor apache o que onda te agradeceria tu ayuda se que el puerto que manejaria seria el 80 pero no termino de entender como jej

  2. 2 Elizabeth
    octubre 2, 2014 a las 9:13 am

    Hola

    Mil gracias por compartir, solo una cosa cuando ejecuto la clase de cliente me muestra la ventanita para el nombre de usuario.. etc pero cuando ejecuto la de servidor no muestra la ventana, falta hacer una clase para eso?

    Gracias.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


I+Ds

Dudas consultas
Facebook
Twiter
Google +

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevas publicaciones por correo.

Únete a otros 348 seguidores

Ingenio DS en Facebook

Redes Sociales y Archivos

Entradas

marzo 2011
L M X J V S D
« Feb   Abr »
 123456
78910111213
14151617181920
21222324252627
28293031  

IngenioDS en twiter


A %d blogueros les gusta esto: