0% encontró este documento útil (0 votos)
214 vistas7 páginas

Ejemplo de Socket Java: Cliente/Servidor

Este documento describe un ejemplo de cliente/servidor en Java. Explica cómo crear un servidor que escuche en un puerto para recibir peticiones de un cliente y responder después de procesarlas. Luego describe cómo crear un cliente que se conecte al servidor en ese puerto para enviar peticiones y recibir respuestas. El código del servidor procesa tres tipos diferentes de peticiones y el código del cliente permite al usuario introducir comandos para enviar al servidor.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
214 vistas7 páginas

Ejemplo de Socket Java: Cliente/Servidor

Este documento describe un ejemplo de cliente/servidor en Java. Explica cómo crear un servidor que escuche en un puerto para recibir peticiones de un cliente y responder después de procesarlas. Luego describe cómo crear un cliente que se conecte al servidor en ese puerto para enviar peticiones y recibir respuestas. El código del servidor procesa tres tipos diferentes de peticiones y el código del cliente permite al usuario introducir comandos para enviar al servidor.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

EJEMPLO SOCKET JAVA – CLIENTE/SERVIDOR

EJEMPLO SOCKET JAVA


- CLIENTE/SERVIDOR

ING. CARLOS EDUARDO RAMIREZ DIAZ 1


EJEMPLO SOCKET JAVA – CLIENTE/SERVIDOR

En este manual construiremos un sencillo sistema Cliente/Servidor en lenguaje


Java, el sistema consistirá básicamente en un Servidor que se pondrá a la escucha
en un puerto “X” de un Cliente el cual mandara peticiones a los cuales el servidor
responderá después de su procesamiento.

Imagen 1: Cliente/Servidor

Necesitamos:
 IDE Netbeans 8.x
 IDE Eclipse Indigo o sup
 Java 7 o sup

El Servidor
El servidor es el encargado de responder las peticiones de los clientes previo
proceso de las mismas. Un servidor puede atender peticiones de varios clientes. En
este ejemplo solo atenderá a un cliente, es recomendable el uso de Thread para
sistemas multi-clientes, pero eso lo veremos en otro ejemplo.
Realizaremos la aplicación servidor en Netbeans.

ING. CARLOS EDUARDO RAMIREZ DIAZ 2


EJEMPLO SOCKET JAVA – CLIENTE/SERVIDOR

Paso 1. Crea un nuevo proyecto con la siguiente estructura de clases y paquetes

Imagen 2: Estructura Servidor

Paso 2. Código
Como ya mencionamos más arriba nuestro servidor estará a la escucha de una
conexión en el puerto 5000. Cuando reciba una petición procesara esta y retornara
el resultado
 libro: Retorna un libro más autor aleatoriamente
 frase: Retornara una frase aleatoria
 exit: retorna mensaje de despedida pero el servidor continuara a la escucha
en el puerto 5000
El método encargado de procesar las peticiones de los clientes es el método
“process“. A continuación el código completo del servidor comentado línea a línea.

package server;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/**
* @author CRD
*/
public class MainServer {

/**
* Puerto
*/
private final static int PORT = 5000;

ING. CARLOS EDUARDO RAMIREZ DIAZ 3


EJEMPLO SOCKET JAVA – CLIENTE/SERVIDOR

/**
* @param args the command line arguments
*/
public static void main(String[] args) {

try {
//Socket de servidor para esperar peticiones de la red
ServerSocket serverSocket = new ServerSocket(PORT);
[Link]("Servidor> Servidor iniciado");
[Link]("Servidor> En espera de cliente...");
//Socket de cliente
Socket clientSocket;
while(true){
//en espera de conexion, si existe la acepta
clientSocket = [Link]();
//Para leer lo que envie el cliente
BufferedReader input = new BufferedReader(new
InputStreamReader([Link]()));
//para imprimir datos de salida
PrintStream output = new PrintStream([Link]());
//se lee peticion del cliente
String request = [Link]();
[Link]("Cliente> petición [" + request + "]");
//se procesa la peticion y se espera resultado
String strOutput = process(request);
//Se imprime en consola "servidor"
[Link]("Servidor> Resultado de petición");
[Link]("Servidor> \"" + strOutput + "\"");
//se imprime en cliente
[Link]();//vacia contenido
[Link](strOutput);
//cierra conexion
[Link]();
}
} catch (IOException ex) {
[Link]([Link]());
}
}

/**
* procesa peticion del cliente y retorna resultado
* @param request peticion del cliente
* @return String
*/
public static String process(String request){
String result="";
//frases
String[] phrases = {
"La tecnología se alimenta a si misma. La tecnología hace posible más tecnología.-Alvin
Toffler.",
"La tecnología es sólo una herramienta. En términos de llevar a los niños a trabajar juntos y
motivarlos, el profesor es el más importante.-Bill Gates.",
"La máquina tecnológicamente más eficiente que el hombre ha inventado es el libro.-
Northrop Frye.",

ING. CARLOS EDUARDO RAMIREZ DIAZ 4


EJEMPLO SOCKET JAVA – CLIENTE/SERVIDOR

"Ya no hacen más los bugs como bunny - Olav Mjelde",


"Un lenguaje de programación es de bajo nivel cuando requiere que prestes atencion a lo
irrelevante.-Alan J. Perlis.",
"Hablar es barato. Enséñame el código.-Linus Torvalds ",
"No me importa si funciona en su máquina! No me envían su máquina!.-Vidiu Platon",
"Siempre codifica como si la persona que finalmente mantendrá tu código fuera un psicópata
violento que sabe dónde vives.-Martin Golding"};
ArrayList<String> phrasesList = new ArrayList<>();
[Link](phrasesList, phrases);
//libros
String[] books = {
"Divina Comedia - Dante Alighieri",
"Don Quijote de la Mancha - Miguel de Cervantes",
"Cien años de soledad - Gabriel García Márquez",
"Moby Dick - Herman Melville",
"Ana Karenina - Lev Tolstói",
"Eneida - Virgilio",
"Otelo - William Shakespeare",
"El viejo y el mar - Ernest Hemingway",
"Orgullo y prejuicio - Jane Austen"};
ArrayList<String> booksList = new ArrayList<>();
[Link](booksList, books);

if(request!=null) switch(request){
case "frase":
[Link](phrasesList);
result = [Link](0);
break;
case "libro":
[Link](booksList);
result = [Link](0);
break;
case "exit":
result = "bye";
break;
default:
result = "La peticion no se puede resolver.";
break;
}
return result;
}

ING. CARLOS EDUARDO RAMIREZ DIAZ 5


EJEMPLO SOCKET JAVA – CLIENTE/SERVIDOR

El Cliente
Para el cliente utilizaremos el IDE Eclipse, existen varias versiones de este IDE,
puedes utilizar cualquiera de ellos, nosotros emplearemos Eclipse Neon.
Paso 1. Crea un proyecto nuevo con la siguiente estructura:

Imagen 3: Estructura Cliente

Paso 2. El Código del Cliente


El código del cliente es más sencillo que el del servidor. La diferencia está que
además de indicar el puerto de conexión, debemos indicar el Host. El código del
cliente más comentarios línea a línea es el siguiente:

package cliente;

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class MainCliente {

/**
* Puerto
* */
private final static int PORT = 5000;
/**
* Host
* */
private final static String SERVER = "localhost";

public static void main(String[] args) {


boolean exit=false;//bandera para controlar ciclo del programa
Socket socket;//Socket para la comunicacion cliente servidor
try {
[Link]("Cliente> Inicio");
while( !exit ){//ciclo repetitivo
socket = new Socket(SERVER, PORT);//abre socket

ING. CARLOS EDUARDO RAMIREZ DIAZ 6


EJEMPLO SOCKET JAVA – CLIENTE/SERVIDOR

//Para leer lo que envie el servidor


BufferedReader input = new BufferedReader( new
InputStreamReader([Link]()));
//para imprimir datos del servidor
PrintStream output = new PrintStream([Link]());
//Para leer lo que escriba el usuario
BufferedReader brRequest = new BufferedReader(new
InputStreamReader([Link]));
[Link]("Cliente> Escriba comando");
//captura comando escrito por el usuario
String request = [Link]();
//manda peticion al servidor
[Link](request);
//captura respuesta e imprime
String st = [Link]();
if( st != null ) [Link]("Servidor> " + st );
if([Link]("exit")){//terminar aplicacion
exit=true;
[Link]("Cliente> Fin de programa");
}
[Link]();
}//end while
} catch (IOException ex) {
[Link]("Cliente> " + [Link]());
}
}

Ejecución del Sistema Cliente/Servidor


Lo primero que se debe ejecutar es el Servidor, ya que si ejecutamos el Cliente
primero y no hay un Servidor escuchando, obviamente tendremos un error de
conexión.

ING. CARLOS EDUARDO RAMIREZ DIAZ 7

También podría gustarte