Sistemas Cliente Servidor Multihilo - bleums/Redes-Comunicaciones GitHub Wiki
//Implementación del código
Clase ClienteBienvenida
` package cliente_servidor; import java.io.; import java.net.; import java.util.*;
public class ClienteBienvenida {
public static void main(java.lang.String[] args){
Socket cliente;
BufferedReader lectorC;
PrintWriter escritorC;
String nombre, respuesta, host;
int puerto;
try{
//Se crea el socket y los flujos asociados
cliente = new Socket("127.0.0.1", 8030);
lectorC = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
escritorC = new PrintWriter(cliente.getOutputStream(), true);
//Se obtiene el nombre del usuario y su host
host = cliente.getLocalAddress().getHostName();
puerto = cliente.getLocalPort();
System.out.println("Digite su nombre: ");
nombre = lectorC.readLine();
/* Se despliega el puerto por pantalla, para verificar que concuerde con
* el dado por el servidor
*/
System.out.println(puerto);
// Se envían los datos al servidor
escritorC.println(nombre);
escritorC.println(host + "(puerto: " + puerto + ")");
//Se recibe la respuesta del servidor y se muestra por consola
respuesta = lectorC.readLine();
System.out.println(respuesta);
//Se cierran los flujos y finalmente el socket
lectorC.close();
escritorC.close();
cliente.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
`
Clase HiloServidorBienvenidaRunnable
`package cliente_servidor;
import java.net.; import java.io.;
public class HiloServidorBienvenidaRunnable implements Runnable{
Socket cliente;
BufferedReader lectorHS;
PrintWriter escritorHS;
public HiloServidorBienvenidaRunnable(Socket solicitud) {
super();
cliente = solicitud;
}
@Override
public void run() {
try{
//Se crean los flujos asociados
lectorHS = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
escritorHS = new PrintWriter(cliente.getOutputStream(), true);
//Se recibe el nombre y host del usuario
String nombre = lectorHS.readLine();
String host = lectorHS.readLine();
//Se crea el mensaje de respuesta y se envía al cliente
String mensaje = "Hola, " + nombre + " en " + host + ", ¡bienvenido(a)!";
escritorHS.println(mensaje);
//Se cierran los flujos y el socket asociado a la solicitud
lectorHS.close();
escritorHS.close();
cliente.close();
}catch(IOException e){
e.printStackTrace();
}
}
} `
Clase HiloServidorBienvenidaThread
`package cliente_servidor; import java.net.; import java.io.;
public class HiloServidorBienvenidaThread extends Thread{
Socket cliente;
BufferedReader lectorHS;
PrintWriter escritorHS;
public HiloServidorBienvenidaThread(Socket solicitud){
super();
cliente = solicitud;
}
public void run(){
try{
//Se crean los flujos asociados
lectorHS = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
escritorHS = new PrintWriter(cliente.getOutputStream(), true);
//Se recibe el nombre y host usuario
String nombre = lectorHS.readLine();
String host = lectorHS.readLine();
//Se crea el mensaje de respuesta y se envía al cliente
String mensaje = "Hola, "+ nombre + " en " + host + ", ¡bienvenido(a)!";
escritorHS.println(mensaje);
//Se cierran los flujos y el socket asociado a la solitud
lectorHS.close();
escritorHS.close();
cliente.close();
}catch(IOException e){
e.printStackTrace();
}
}
} `
Clase ServidorBienvenidaRunnable
`package cliente_servidor;
import java.net.; import java.io.;
public class ServidorBienvenidaRunnable {
public void main(java.lang.String[] args){
try{
ServerSocket servidor = new ServerSocket(8030);
while(true){
Socket c = servidor.accept();
Thread hilo = new Thread(new HiloServidorBienvenidaThread(c));
hilo.start();
}
}catch(IOException e){
e.printStackTrace();
}
}
} `
Clase ServidorBienvenidaThread
`package cliente_servidor;
import java.net.; import java.io.;
public class ServidorBienvenidaThread { public static void main(java.lang.String[] args){
try{
ServerSocket servidor = new ServerSocket(8030);
while(true){
Socket c = servidor.accept();
HiloServidorBienvenidaThread hilo = new HiloServidorBienvenidaThread(c);
hilo.start();
}
}catch(IOException e){
e.printStackTrace();
}
} } `