La conexión del zócalo funciona bien en el emulador pero no se puede enviar en un dispositivo real (J2ME)

StackOverflow https://stackoverflow.com//questions/12654477

Pregunta

Estoy desarrollando una aplicación de servidor / cliente. La aplicación funciona bien en un emulador, pero cuando lo pruebo en un Nokia 5200 o en un Nokia 6303i, aunque la conexión se establece con éxito, el servidor bloquea el primer método de lectura.En otras palabras, la aplicación cliente (J2ME) no puede enviar datos al servidor.

Pieza de mi cliente:

        Thread occ=new Thread(new Runnable() {

                    public void run() {
                        try {
                            SocketConnection sc = (SocketConnection)Connector.open("socket://213.233.169.142:2000");
                            sc.setSocketOption(SocketConnection.DELAY, 0);
                            OutputStream os=sc.openDataOutputStream();
                            DataOutputStream dos=new DataOutputStream(os);

                            InputStream is=sc.openDataInputStream();
                            DataInputStream dis=new DataInputStream(is);

        //dos.writeUTF(receiverT.getString());


        os.write("saalam".getBytes());                                                      

        os.flush();


        dos.writeUTF(Midlet.userPhoneNumber);
        dos.flush();



        dos.writeUTF(messT.getString());
        dos.flush();

          while((!dis.readUTF().equals("system-use:code=2")) && false)
        {

        }




        dos.close();
        os.close();
        sc.close();

                        } catch (IOException ex) {
                            ex.printStackTrace();
                        }
                    }
                });  

        occ.start();

MI PARTE DEL SERVIDOR:

 serverSocket = new ServerSocket(2000);
 Socket socket=serverSocket.accept();
 System.out.println("connection stablished");
 inp=new DataInputStream(mySocket.getInputStream());
 outp=new DataOutputStream(mySocket.getOutputStream());

 receiverTemp=inp.read();//the server code blocks on this line

 senderTemp=inp.readUTF();
 .
 .
 .
 .

¿Fue útil?

Solución 2

El problema finalmente resuelto. El problema fue que algunos operadores móviles no permiten enviar / recibir información con sockets sin procesar, por lo que utilizamos sockets HTTP en el puerto 80 y funcionó.

Otros consejos

¿Estableció permisos de socket en el archivo JAD?Este hecho es muy importante para resolver este tipo de problemas en los dispositivos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top