style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Juego de loteria con sockets

Buenos dias gente, en esta ocacion traigo un problema que me gustaria ayudaran a resolver con respecto a una loteria con sockets que se puede jugar en red(es la idea), he estado leyendo y revisando codigos y como hay muchos ejemplos de chats opte por seguir ese esquema. Con "Loteria" me refiero a la que se juega con una baraja y una carta y vas marcando los objetos que van saliendo de la baraja. Bueno al grano.

El servidor se levanta y queda a la espera de clientes, cada vez que un cliente se conecta es atendido por un hilo el cual manda las cartas al cliente cada vez que se hace click en un boton. Represento a las cartas con numeros que son los que se mandan por el socket al cliente, algo como:

while(true){
            try {
                switch(opcion){
                    case 1:
       MandarPorSocket(1);//Opcion de pasar siguiente carta en el cliente
       MandarPorSocket(posAleatorias[posActual]);//Manda al cliente la carta en la posicion actual del servidor
       posActual++;//
                        break;
                }
               
            } catch (InterruptedException ex) {
                Logger.getLogger(threadServidor.class.getName()).log(Level.SEVERE, null, ex);
            }
           opcion=0;
        }

*las posiciones las genero aleatoriamente en un arreglo de enteros.

El metodo MandarPorSocket()

public void mandarPorSocket(int opcion) throws InterruptedException{
        threadServidor user = null;
        try {
            for (int i = 0; i < clientesActivos.size(); i++) {
                user = clientesActivos.get(i);              
                user.mandar.writeInt(opcion);
            }

        } catch (IOException ex) {
            Logger.getLogger(threadServidor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

El cliente se conecta al servidor si hay conexion y un hilo atiende todo lo que llega por el socket como la opcion de cambiar de carta, algo como:

while(true){
           
            try {
              opcion=entrada.readInt(); //Lee la opcion mandada desde el servidor
               
                switch(opcion){
                    case 1:
                        System.out.println("Mensaje recibido del servidor: "+entrada.readInt());
                        vcli.SiguienteBaraja(entrada.readInt());//Pasa a la siguiente baraja que le indica el servidor
                        break;
                }
            } catch (IOException ex) {
                Logger.getLogger(threadCliente.class.getName()).log(Level.SEVERE, null, ex);          
            opcion =0;
        }
    }

El metodo SiguienteBaraja();

public void siguienteBaraja(int posicion){
       
        lblBaraja.setIcon(new ImageIcon(lstImagenes.get(posicion)));
       
    }

El problema es que no funciona solo manda y recibe de una a tres cartas por el socket, despues ya no sigue pasando las posiciones de las cartas por el socket, espero me ayuden a resolver esto, con un poco de logica o codigo, cualquier idea es bienvenida. Gracias de antemano. =)

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de beto.bateria

Hilos

Te falta implementar hilos, por eso recibes pocas cartas.

Imagen de n00b

Si los implemento, un hilo

Si los implemento, un hilo para el cliente y un hilo en el servidor que manejan el proceso de entrada y salida.

Imagen de n00b

Estuve leyendo sobre los

Estuve leyendo sobre los problemas que pueden ocurrir al implementar este tipo de aplicaciones y uno de los problemas es el desbordamiento de bufer pero no se si sea el problema en este caso (aunque no soy yo el que define la longitud del bufer). Lo que no me explico es por que si manda dos o tres datos y luego ya no sigue mandando o recibiendo :-s. Alguien q tenga experiencia en estas aplicaciones ¿me podria iluminar?

Imagen de n00b

Pude resolver el problema,

Pude resolver el problema, pero surgio una nueva duda.

Mi aplicacion funciona de maravilla en una red local, pero cuando intento usarla en internet no funciona.

Esta es la excepcion:

ago 21, 2012 11:44:11 PM interfaces.ConexionCliente Conectar
Grave: null
java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.(Socket.java:425)
at java.net.Socket.(Socket.java:208)
at interfaces.ConexionCliente.Conectar(ConexionCliente.java:41)
at interfaces.Principal.(Principal.java:57)
at interfaces.Principal$10.run(Principal.java:706)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

¿Alguien me puede orientar?

Imagen de ezamudio

firewall?

Broncas de firewall?

Para saber si hay conectividad desde el cliente al servidor, simplemente haz un telnet a la IP del servidor en el puerto donde escucha tu aplicación, desde el equipo del cliente.

Imagen de n00b

No hubo conexion

Gracias por contestar. Probe lo que me dijiste pero no funciono, desactive antivirus y firewall tanto en el servidor como en el cliente y no se pudo. No se si tenga que configurar el modem de telmex, pero el detalle es que no se como hacerlo -_-

Imagen de arterzatij

En efecto es el modem tienes

En efecto es el modem tienes que agregar a tus reglas del firewall una aplicacion donde le indicaras donde esta dicha aplicacion y el puerto que utilizara. una vez hecho eso tienes que agregar la aplicacion a los puertos permitidos al WAN

http://mobi.carbamex.com/configurar-modem.html

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">