programando sockets,, no se si sea correcto el llamarle programacion red pero yo asi le entiendo en fin, pues acabo de aventarme un programa sencillo que lleva acabo una comuncacion entre dos makinas cliente-servidor de forma parecida a un chat. Aunque es algo muy sencillo aki les dejo el script para el que lo quiera probar y hacer con el lo que desee, ala vez que pido aquellos que sepan de este desmadre el si me pueden decir como hacer una comunciacion simultanea mediante este metodo o bien que tendria que hacer para lograrlo.
/*PROGRAMA QUE EJEMPLIFICA EL MODELO DE COMUNICACION CLIENTE-SERVIDOR
*
* THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AN MODIFY IT
* UNDER TERMS OF THE GPL GENERAL PUBLIC LICENSE. PODES DISTRIBUIRLO
* (HE) CORPORATION, PROGRAMADOR: CIMI
*
*LA COMUNICACION LA REALIZA MEDIANTE EL PROTOCOLO TCP PROCURANDO OCUPAR
*PUERTOS SUPERIORES AL 1024 DEBIDO A QUE DENTRO DE ESTE RANGO 0-1024
*SE ENCUENTRAN PUERTOS QUE PERTENECEN A SERVICIOS BASICOS, POR ELLO LA
*ELECCION DEL PUERTO 35557 AUNQUE PUDO HABER SIDO OTRO.
*
*EL FUNCIONAMIENTO HASTA EL MOMENTO ES FULLDUPLEX CREANDO UN AMBIENTE SIMILAR
*AL DE UN CHAT CON LA RESPECTIVA DIFERENCIA QUE NO PUEDE HABER ENVIO DE
*MENSAJES SIMULTANEOS.
*
*NOTA IMPORTANTE:
*EL SERVIDOR SERA QUIEN ESTE ESCUCHANDO PETICIONES DE CONEXION, POR TANTO
*PARA EL FUNCIONAMIENTO CORRECTO DEL PROGRAMA EJECUTAR PRIMERO Y ESCRIBIR EN
*EL SCRIPT DEL SERVER Y POSTERIORMENTE EL DEL CLIENTE
*/
//SCRIPT SERVER.JAVA ESTE SE ENCARGARA DE ESCUCHAR PARA ESTABLECER LA COMUNICACION
import java.io.*;//NECESARIA PARA EL MANEJO DE ENTRADA Y SALIDA DE DATOS
import java.net.*;//NECESARIA PARA EL USO DE SOCKETS
public class server
{
/*SE MANEJARA LA EXCEPTION EXIGIDA POR EL PROGRAMA, EN ESTE CASO
DICHA EXCEPCION SE ENFOCARA ALA ENTRADA Y SALIDA DE DATOS (io) POR ELLO
VA EL throws IOException*/
public static void main(String arg[]) throws IOException
{
//DECLARACION DE VARIABLES
String cadena0,cadena1="";
int control=0;
//CREANDO EL PUNTO DE COMUNICACION SERVIDOR
ServerSocket punto=new ServerSocket(35557);//ACEPTAR CLIENTES POR CONEXION TCP Y PUERTO X
//SISTEMA BLOQUEADO HASTA QUE UN CLIENTE SE CONECTE, PARA DESPUES ACEPTAR SU LLAMADA
System.out.println("*SERVIDOR INICIADO*, ESPERANDO AL CLIENTE");
Socket cliente=punto.accept();
//getInetAddress PERTENECE ALA CLASE INETADDRES QUE SIRVE PARA CONOCER UN HOST
System.out.println("CONECTADO CON: " + cliente.getInetAddress());
//SE DEFINE UN OBJETO PARA EL FLUJO DE SALIDA Y ENTRADA STREAM SOBRE O CON EL SOCKET
DataOutputStream salida=new DataOutputStream(cliente.getOutputStream());
DataInputStream entrada=new DataInputStream(cliente.getInputStream());
//PARA PODER ALMACENAR UN STRING ES NECESARIO CREAR LO SIGUIENTE
//EL CONSTRUCTOR DE BUFFEREDREADER RECIBE UN FLUJO DE ENTRA STRAM DE TIPO BASICO
BufferedReader bufflectura=new BufferedReader(new InputStreamReader(System.in));
//CLICLAMOS EL DESMADRE PARA QUE ESTE PIDIENDO Y ENVIANDOLOS DATOS
//MEDIANTE LA VARIABLE CADENA QUE RECIBE EL DATO DEL TECLADO Y
//LO COLOCA EN LA ENTRADA DEL STREAM PARA SU ENVIO EN LA RED
do{
if(control>0)//CONTROLANDO QUE PRIMERO EL SERVER ESCRIBA Y YA DESPUES RECIBA
{
cadena1=entrada.readUTF();
}
//SI EL CONTROL ANTERIOR NO SE LLEVA ACABO, EL SERVER QUEDARA ESPERANDO
//UN MENSAJE IMPIDIENDO EL AVANCE DEL SCRIPT
//VALIDANDO LA SALIDA SI SE RECIBE EL PUTO salir
if(cadena1.equals("salir"))
{
break;
}
else
{
System.out.println("RECIBIENDO MENSAJE: "+cadena1);
}
//PEDIR MENSAJE A ENVIAR
System.out.print("MENSAJE: ");
cadena0=bufflectura.readLine();
control++;
//SE ESCRIBE EL MENSAJE, writeUTF ES PARA CADENAS, writeInt PARA NUMEROS, ETC
salida.writeUTF(cadena0);
//VALIDANDO LA SALIDA HASTA QUE SE ESCRIBA EL PUTO salir
if(cadena0.equals("salir"))
{
break;
}
else
{
System.out.println("****MENSAJE ENVIADO****");
}
}while(true);
//CERRANDO EL SOCKET
cliente.close();//SOCKET ENCARGADO DE LA CONEXION CON EL CLIENTE
punto.close();//SOCKET ENCARGADO DE ACEPTAR CLIENTES
}
}
A KI VA EL CODIGO DEL SCRIPT CLIENTE
//SCRIPT CLIENTE.JAVA ESTE SE CONECTARA CON EL SERVIDOR
import java.io.*;//NECESARIA PARA EL MANEJO DE ENTRADA Y SALIDA DE DATOS
import java.net.*;//NECESARIA PARA EL MANEJO DE SOCKETS
public class cliente
{
public static void main(String arg[])
{
new cliente(); //CREANDO EL OBJETO CLASE CLIENTE
}
//CONSTRUCTOR
public cliente()
{
//SOLO PARA EFECTOS DE APRENDER EXCEPCIONES MANEJE EN ESTE CASO EL TRY
//PERO DE IGUAL FORMA SE PUDO HABER MANEJADO COMO SE HIZO EN EL SCRIPT DEL SERVER
//AGREGANDO throws IOException DESPUES DEL main() Y ELIMINANDO EL USO DE
//UN CONSTRUCTOR, ES DECIR, AGREGANDO TODO EL CODIGO DENTRO DEL MISMO main()
try{
//DECLARACION DE VARIABLES
String cadena0,cadena1="";
//CREANDO LA CONEXION AL HOST ESPECIFICADO Y SU RESPECTIVO PUERTO EN QUE ESCUCHA
Socket punto=new Socket("localhost",35557);
System.out.println("CONECTADO");
//SE DEFINE UN FLUJO DE ENTRADA Y SALIDA CON O SOBRE EL SOCKET CREADO
DataInputStream entrada=new DataInputStream(punto.getInputStream());
DataOutputStream salida=new DataOutputStream(punto.getOutputStream());
//PARA PODER ALMACENAR UN STRING ES NECESARIO CREAR LO SIGUIENTE
//EL CONSTRUCTOR DE BUFFEREDREADER RECIBE UN FLUJO DE ENTRADA STREAM DE TIPO BASICO
BufferedReader buff=new BufferedReader(new InputStreamReader(System.in));
//CICLAMOS EL DESMADRE PARA QUE ESTE RECIBIENDO LOS DATOS SIN PERDER SU CONEXION
//HASTA QUE RECIBA COMO DATO EL STRING exit
do{
//SE LEEN LOS DATOS DEL FLUJO DE ENTRADA (ENVIADOS POR EL SERVIDOR)
cadena0=entrada.readUTF();
//VALIDANDO LA SALIDA SI SE RECIBE EL PUTO salir
if(cadena0.equals("salir"))
{
break;
}else
{
System.out.println("RECIBIENDO MENSAJE: "+cadena0);
}
//ENVIANDO MENSAJE
System.out.print("MENSAJE: ");
cadena1=buff.readLine();
salida.writeUTF(cadena1);
//VALIDANDO LA SALIDA HASTA QUE SE ESCRIBA EL PUTO salir
if(cadena1.equals("salir"))
{
break;
}
else
{
System.out.println("****MENSAJE ENVIADO****");
}
}while(true);
punto.close();//CERRANDO CONEXION DEL SOCKET
}catch(Exception e)
{
e.printStackTrace();//TRATA LA EXCEPCION ARROJANDO EL POSIBLE ERROR
//BIEN PUEDE NO IR NADA UNICAMENTE catch(Exception){}
}
}//FIN DEL CONSTRUCTOR
}
Espero les divierta de algo aunqeu sea algo muy simple,,
saludos.
/*PROGRAMA QUE EJEMPLIFICA EL MODELO DE COMUNICACION CLIENTE-SERVIDOR
*
* THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AN MODIFY IT
* UNDER TERMS OF THE GPL GENERAL PUBLIC LICENSE. PODES DISTRIBUIRLO
* (HE) CORPORATION, PROGRAMADOR: CIMI
*
*LA COMUNICACION LA REALIZA MEDIANTE EL PROTOCOLO TCP PROCURANDO OCUPAR
*PUERTOS SUPERIORES AL 1024 DEBIDO A QUE DENTRO DE ESTE RANGO 0-1024
*SE ENCUENTRAN PUERTOS QUE PERTENECEN A SERVICIOS BASICOS, POR ELLO LA
*ELECCION DEL PUERTO 35557 AUNQUE PUDO HABER SIDO OTRO.
*
*EL FUNCIONAMIENTO HASTA EL MOMENTO ES FULLDUPLEX CREANDO UN AMBIENTE SIMILAR
*AL DE UN CHAT CON LA RESPECTIVA DIFERENCIA QUE NO PUEDE HABER ENVIO DE
*MENSAJES SIMULTANEOS.
*
*NOTA IMPORTANTE:
*EL SERVIDOR SERA QUIEN ESTE ESCUCHANDO PETICIONES DE CONEXION, POR TANTO
*PARA EL FUNCIONAMIENTO CORRECTO DEL PROGRAMA EJECUTAR PRIMERO Y ESCRIBIR EN
*EL SCRIPT DEL SERVER Y POSTERIORMENTE EL DEL CLIENTE
*/
//SCRIPT SERVER.JAVA ESTE SE ENCARGARA DE ESCUCHAR PARA ESTABLECER LA COMUNICACION
import java.io.*;//NECESARIA PARA EL MANEJO DE ENTRADA Y SALIDA DE DATOS
import java.net.*;//NECESARIA PARA EL USO DE SOCKETS
public class server
{
/*SE MANEJARA LA EXCEPTION EXIGIDA POR EL PROGRAMA, EN ESTE CASO
DICHA EXCEPCION SE ENFOCARA ALA ENTRADA Y SALIDA DE DATOS (io) POR ELLO
VA EL throws IOException*/
public static void main(String arg[]) throws IOException
{
//DECLARACION DE VARIABLES
String cadena0,cadena1="";
int control=0;
//CREANDO EL PUNTO DE COMUNICACION SERVIDOR
ServerSocket punto=new ServerSocket(35557);//ACEPTAR CLIENTES POR CONEXION TCP Y PUERTO X
//SISTEMA BLOQUEADO HASTA QUE UN CLIENTE SE CONECTE, PARA DESPUES ACEPTAR SU LLAMADA
System.out.println("*SERVIDOR INICIADO*, ESPERANDO AL CLIENTE");
Socket cliente=punto.accept();
//getInetAddress PERTENECE ALA CLASE INETADDRES QUE SIRVE PARA CONOCER UN HOST
System.out.println("CONECTADO CON: " + cliente.getInetAddress());
//SE DEFINE UN OBJETO PARA EL FLUJO DE SALIDA Y ENTRADA STREAM SOBRE O CON EL SOCKET
DataOutputStream salida=new DataOutputStream(cliente.getOutputStream());
DataInputStream entrada=new DataInputStream(cliente.getInputStream());
//PARA PODER ALMACENAR UN STRING ES NECESARIO CREAR LO SIGUIENTE
//EL CONSTRUCTOR DE BUFFEREDREADER RECIBE UN FLUJO DE ENTRA STRAM DE TIPO BASICO
BufferedReader bufflectura=new BufferedReader(new InputStreamReader(System.in));
//CLICLAMOS EL DESMADRE PARA QUE ESTE PIDIENDO Y ENVIANDOLOS DATOS
//MEDIANTE LA VARIABLE CADENA QUE RECIBE EL DATO DEL TECLADO Y
//LO COLOCA EN LA ENTRADA DEL STREAM PARA SU ENVIO EN LA RED
do{
if(control>0)//CONTROLANDO QUE PRIMERO EL SERVER ESCRIBA Y YA DESPUES RECIBA
{
cadena1=entrada.readUTF();
}
//SI EL CONTROL ANTERIOR NO SE LLEVA ACABO, EL SERVER QUEDARA ESPERANDO
//UN MENSAJE IMPIDIENDO EL AVANCE DEL SCRIPT
//VALIDANDO LA SALIDA SI SE RECIBE EL PUTO salir
if(cadena1.equals("salir"))
{
break;
}
else
{
System.out.println("RECIBIENDO MENSAJE: "+cadena1);
}
//PEDIR MENSAJE A ENVIAR
System.out.print("MENSAJE: ");
cadena0=bufflectura.readLine();
control++;
//SE ESCRIBE EL MENSAJE, writeUTF ES PARA CADENAS, writeInt PARA NUMEROS, ETC
salida.writeUTF(cadena0);
//VALIDANDO LA SALIDA HASTA QUE SE ESCRIBA EL PUTO salir
if(cadena0.equals("salir"))
{
break;
}
else
{
System.out.println("****MENSAJE ENVIADO****");
}
}while(true);
//CERRANDO EL SOCKET
cliente.close();//SOCKET ENCARGADO DE LA CONEXION CON EL CLIENTE
punto.close();//SOCKET ENCARGADO DE ACEPTAR CLIENTES
}
}
A KI VA EL CODIGO DEL SCRIPT CLIENTE
//SCRIPT CLIENTE.JAVA ESTE SE CONECTARA CON EL SERVIDOR
import java.io.*;//NECESARIA PARA EL MANEJO DE ENTRADA Y SALIDA DE DATOS
import java.net.*;//NECESARIA PARA EL MANEJO DE SOCKETS
public class cliente
{
public static void main(String arg[])
{
new cliente(); //CREANDO EL OBJETO CLASE CLIENTE
}
//CONSTRUCTOR
public cliente()
{
//SOLO PARA EFECTOS DE APRENDER EXCEPCIONES MANEJE EN ESTE CASO EL TRY
//PERO DE IGUAL FORMA SE PUDO HABER MANEJADO COMO SE HIZO EN EL SCRIPT DEL SERVER
//AGREGANDO throws IOException DESPUES DEL main() Y ELIMINANDO EL USO DE
//UN CONSTRUCTOR, ES DECIR, AGREGANDO TODO EL CODIGO DENTRO DEL MISMO main()
try{
//DECLARACION DE VARIABLES
String cadena0,cadena1="";
//CREANDO LA CONEXION AL HOST ESPECIFICADO Y SU RESPECTIVO PUERTO EN QUE ESCUCHA
Socket punto=new Socket("localhost",35557);
System.out.println("CONECTADO");
//SE DEFINE UN FLUJO DE ENTRADA Y SALIDA CON O SOBRE EL SOCKET CREADO
DataInputStream entrada=new DataInputStream(punto.getInputStream());
DataOutputStream salida=new DataOutputStream(punto.getOutputStream());
//PARA PODER ALMACENAR UN STRING ES NECESARIO CREAR LO SIGUIENTE
//EL CONSTRUCTOR DE BUFFEREDREADER RECIBE UN FLUJO DE ENTRADA STREAM DE TIPO BASICO
BufferedReader buff=new BufferedReader(new InputStreamReader(System.in));
//CICLAMOS EL DESMADRE PARA QUE ESTE RECIBIENDO LOS DATOS SIN PERDER SU CONEXION
//HASTA QUE RECIBA COMO DATO EL STRING exit
do{
//SE LEEN LOS DATOS DEL FLUJO DE ENTRADA (ENVIADOS POR EL SERVIDOR)
cadena0=entrada.readUTF();
//VALIDANDO LA SALIDA SI SE RECIBE EL PUTO salir
if(cadena0.equals("salir"))
{
break;
}else
{
System.out.println("RECIBIENDO MENSAJE: "+cadena0);
}
//ENVIANDO MENSAJE
System.out.print("MENSAJE: ");
cadena1=buff.readLine();
salida.writeUTF(cadena1);
//VALIDANDO LA SALIDA HASTA QUE SE ESCRIBA EL PUTO salir
if(cadena1.equals("salir"))
{
break;
}
else
{
System.out.println("****MENSAJE ENVIADO****");
}
}while(true);
punto.close();//CERRANDO CONEXION DEL SOCKET
}catch(Exception e)
{
e.printStackTrace();//TRATA LA EXCEPCION ARROJANDO EL POSIBLE ERROR
//BIEN PUEDE NO IR NADA UNICAMENTE catch(Exception){}
}
}//FIN DEL CONSTRUCTOR
}
Espero les divierta de algo aunqeu sea algo muy simple,,
saludos.