Foro de elhacker.net

Programación => Java => Mensaje iniciado por: lexoazul en 23 Octubre 2009, 03:05 am



Título: SERVIDOR CON MULTIPLES CLIENTES
Publicado por: lexoazul en 23 Octubre 2009, 03:05 am
Hola a toda la comunidad, tengo un problemilla quisiera saber si alguien me pude ayudar o si alguien sabe como un servidor puede atender a varios clientes a la vez; ya tengo hecho las clases cliente/servidor pero solo puede interactuar un cliente con el servidor, si alguien sabe se lo agradeceria mucho; cualquier comentario o ayuda sera bienvenido; de ante mano muchsimas gracias.

 :D         :rolleyes:                              :laugh:         :silbar:


Título: Re: SERVIDOR CON MULTIPLES CLIENTES
Publicado por: isseu en 23 Octubre 2009, 03:13 am
lee sobre sockets asincronos (o asincronicros?)


Título: Re: SERVIDOR CON MULTIPLES CLIENTES
Publicado por: Leyer en 23 Octubre 2009, 05:39 am
es facil solo tienes que crear un obj usuario por cada conexion entrante y comunicarte con el enviandole algun command/msg.

Código
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.PrintWriter;
  5. import java.net.InetAddress;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. import java.net.UnknownHostException;
  9. import java.util.Hashtable;
  10.  
  11. /**
  12.  * @Autor Leyer
  13.  * @see   GlassFish Tools Bundle For Eclipse
  14.  *
  15.  * Servidor simple para multiples conexiones
  16.  */
  17. interface config{
  18. public static final int    _port    = 8081;
  19. public static final int    _backlog = 500;
  20. public static final String _host    = "localhost";
  21. }
  22. public class server extends ServerSocket implements Runnable
  23. {
  24. private class user extends Thread{
  25. private BufferedReader reader      = null;
  26. private PrintWriter    printWriter = null;
  27. private Socket  socket             = null;
  28. private boolean connected          = false;
  29. private int     nro = 0;
  30. private String username = null;
  31. public user(Socket socket, int nro){
  32. this.socket = socket;
  33. try {
  34. reader = new BufferedReader(new InputStreamReader(server.this.socket.getInputStream()));
  35.    printWriter = new PrintWriter(this.socket.getOutputStream());
  36. connected = true;
  37. username = this.socket.getLocalAddress().getHostAddress();
  38. this.nro = nro;
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. }
  42. }
  43.             void writer(String msg){
  44. printWriter.println(msg);
  45. }
  46. public boolean isActive() {
  47. return connected;
  48. }
  49. public void setActive(boolean active) {
  50. this.connected = active;
  51. }
  52. @Override
  53. public void run() {
  54. while(connected){
  55. try {
  56. if(reader.ready()){
  57. String msg = reader.readLine();
  58. System.out.println(" User:"+nro+ "+"+username+"-> "+msg);
  59. if(msg.equalsIgnoreCase("disconnected")){
  60. handler.remove(username);
  61. }
  62. }
  63. } catch (IOException e) {
  64. e.printStackTrace();
  65. }
  66. }
  67. }}
  68. private Socket      socket    = null;
  69. boolean init                    = true;
  70. private Hashtable< String, user> handler  = new Hashtable<String, user>();
  71. int nro = 0;
  72. @Override public void run() {
  73. while(init){
  74. try {socket = accept();
  75. System.out.println("New User: "+socket.getLocalAddress().getHostAddress());
  76. handler.put(socket.getLocalAddress().getHostAddress(), new user(socket,nro));
  77. handler.get(socket.getLocalAddress().getHostAddress()).writer("true");
  78. nro ++;
  79. } catch (IOException e) {
  80. e.printStackTrace();
  81. }
  82. }
  83. }
  84. public boolean isInit() {
  85. return init;
  86. }
  87. public void setInit(boolean init) {
  88. this.init = init;
  89. }
  90. public server(int port, int backlog, InetAddress bindAddr)
  91. throws IOException {
  92. super(port, backlog, bindAddr);
  93. System.out.println("---------------------------------------");
  94. System.out.println("Server is OK");
  95. System.out.println("---------------------------------------");
  96. new Thread(this).start();
  97. }
  98. /**
  99. * @param args
  100. * @throws IOException
  101. * @throws UnknownHostException
  102. */
  103. public static void main(String[] args) throws UnknownHostException
  104. new server(config._port,
  105. config._backlog,
  106. InetAddress.getByName(config._host));
  107. }
  108. }

Saludos