Servidor.java

   1 /**
   2  * Servidor.java
   3  * 
   4  * @author Luis Alejandro Bernal
   5  * 
   6  * La parte servidor de un chat de un solo canal. Su objetivo es didáctico por lo que trata de
   7  * ser muy sencillo. Tiene un ciclo que siempre se cloquea en el accept, cuando se desbloquea 
   8  * crea un Serv, que es un servidor. Éste ;ultimo lo que hece es estar leyendo del socket
   9  * de su respectivo cliente y cuando llega un mensaje lo envia a la Lista se sockets.
  10  */
  11 
  12 import java.io.BufferedReader;
  13 import java.io.IOException;
  14 import java.io.InputStreamReader;
  15 import java.io.PrintStream;
  16 import java.net.ServerSocket;
  17 import java.net.Socket;
  18 
  19 class ListaSockets{
  20         private Socket[] socket; // Los otros sockets
  21         private PrintStream[] salida;
  22         private int num;
  23 
  24         public ListaSockets(int n) {
  25                 socket = new Socket[n];
  26                 salida = new PrintStream[n];
  27                 num = 0;
  28         }
  29         
  30         public void add(Socket s){
  31                 try {
  32                         salida[num] = new PrintStream(s.getOutputStream());
  33                 } catch (IOException e) {
  34                         e.printStackTrace();
  35                 }
  36                 socket[num++] = s;
  37         }
  38         
  39         public int length(){
  40                 return num;
  41         }
  42         
  43         public Socket get(int n) {
  44                 return socket[n];
  45         }
  46 
  47         public PrintStream getSalida(int n) {
  48                 return salida[n];
  49                 
  50         }
  51 }
  52 
  53 class Serv implements Runnable{
  54         private Socket socket; // Socket propio.
  55         private ListaSockets listaSockets; // Los otros sockets
  56         
  57         public Serv(Socket s, ListaSockets ls) {
  58                 socket = s;
  59                 listaSockets = ls;      
  60         }
  61         
  62         public void run() {
  63                 BufferedReader entrada;
  64 
  65                 try {
  66                         entrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  67                         String mensaje;
  68                 while( (mensaje = entrada.readLine()) != null){
  69                         for (int i = 0; i < listaSockets.length(); i++) {
  70                                 listaSockets.getSalida(i).println(mensaje);
  71                                 }
  72                         }
  73                 } catch (IOException e) {
  74                         e.printStackTrace();
  75                 }
  76         }
  77         
  78 }
  79 
  80 public class Servidor {
  81         private static final int puerto = 9999;
  82         private static final int max = 10000;
  83         
  84         public static void main(String[] args) {
  85                 ServerSocket serverSocket;
  86                 ListaSockets listaSockets = new ListaSockets(max);
  87                 Serv[] serv = new Serv[max];
  88                 Thread[] thread = new Thread[max];
  89                 try {
  90                         serverSocket = new ServerSocket(puerto);
  91                         for(int i = 0; i < max; i++){
  92                         Socket socket = serverSocket.accept();
  93                                 listaSockets.add(socket);
  94                                 serv[i] = new Serv(socket, listaSockets);
  95                                 thread[i] = new Thread(serv[i]);
  96                                 thread[i].start();
  97                         }
  98                 } catch (IOException e) {
  99                         e.printStackTrace();
 100                 }
 101         }
 102 
 103 }

CategoryJava | CategoryProgramacion

Java/Programas/Chat/Servidor.java (last edited 2008-04-20 14:39:48 by localhost)