Problema al conectarse a un servlet con midlet

Estoy tratando de conectarme a un Servlet con mi aplicación j2me y no está sucediendo.

Caso 1:

1) Implemente el servlet en la máquina local.

2) Conéctese al servlet en la máquina local con la aplicación j2me y espere a que el servlet devuelva un valor aa

3) J2ME obtiene el valor del servlet y lo muestra en la pantalla.

¡Funciona sin problemas!

Caso 2:

1) Implemente el servlet en una máquina remota.

2) Conéctese al servlet en la máquina remota con la aplicación j2me y espere a que el servlet devuelva un valor aa

3) J2me recibe un error que dice una respuesta vacía. ¿Por qué?

Aquí está mi código:

Caso 1: MIDlet implementado en una máquina local

HttpConnection c = (HttpConnection) Connector.open("http://localhost:8999/PercentileCalculator/PercentileCalculator");
                c.setRequestProperty("User-Agent","Profile/MIDP-2.0, Configuration/CLDC-1.1");
                c.setRequestProperty("Content-Language","en-US");
                c.setRequestMethod(HttpConnection.POST); 
                DataOutputStream os = (DataOutputStream)c.openDataOutputStream();

                os.writeUTF("100");
                os.writeUTF("Test 1");
                os.writeByte(12);
                os.flush();
                os.close();

                // Get the response from the servlet page.
                DataInputStream is =(DataInputStream)c.openDataInputStream();

Caso 2: MIDlet implementado en una máquina remota

HttpConnection c = (HttpConnection) Connector.open("Url goes here");

                    c.setRequestProperty("User-Agent","Profile/MIDP-2.0, Configuration/CLDC-1.1");
                    c.setRequestProperty("Content-Language","en-US");
                    c.setRequestMethod(HttpConnection.POST); 
                    DataOutputStream os = (DataOutputStream)c.openDataOutputStream();

                    os.writeUTF("100");
                    os.writeUTF("Test1");
                    os.writeByte(12);
                    os.flush();  -->Exception thrown here.
                    os.close();

                    // Get the response from the servlet page.
                    DataInputStream is =(DataInputStream)c.openDataInputStream();

¿Cual podría ser el problema?

Actualización 1: domingo 12.01 de mayo a las 5:XNUMX

Puedo llamar a mi servlet remoto usando mi midlet. Escribí un sql para conectarme a una base de datos mysql y agregar una nueva fila a la base de datos para cada llamada que hace el midlet al servlet remoto. Y sí, esto funciona.

Ahora el problema es... ¿por qué el servlet remoto no puede devolver valores a mi midlet? ¿Por qué siempre obtengo una respuesta vacía?

Actualización 2: martes 9.46 de mayo a las 8 a. m.

En el caso 2, reemplacé la URL con lo siguiente:

  1. www.google.com --> obtuve una respuesta de google ... alguna cadena xml
  2. www.facebook.com --> obtuve una respuesta... que en realidad era una excepción de puntero nulo
  3. m.facebook.com--> obtuve una respuesta de facebook... alguna cadena xml
  4. www.yahoo.com ---> sin respuesta

Ahora siento que mi servlet necesita imprimir una cadena xml y no una página http normal. Por favor vierte...

Actualización 3 8.41:14 am XNUMX de mayo Lunes

Intenté acceder a un sitio web de amigos usando mi código j2me. Es decir, solo reemplazo la URL en el caso 2 con algo como http://www.friend'sURL.in --> funcionó (obtuve una respuesta)

Entonces, lo intenté http://www.mywebsiteURL.in --> respuesta vacía

Entonces, siento que algo anda mal con mi servidor/alojamiento web... ni idea.

ACTUALIZACIÓN 4 22 MAYO 2012 MARTES

Por sugerencia de telmo, miré los registros de mi servidor y son los siguientes:

1) Campos de registro

#Campos: fecha hora s-nombre del sitio s-nombre de la computadora s-ip cs-método cs-uri-stem cs-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Cookie) cs (Referente) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken

2) Solicitudes desde un navegador usando mi escritorio (se han mostrado 2 solicitudes)

2012-05-21 04:39:06 W3SVC6826 BJJI-GLOBEDNS 67.227.164.68 GET /Servlet/PercentileCalculator - 80 - 116.203.33.229 HTTP/1.1 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/536.5+(KHTML,+like+Gecko)+Chrome/19.0.1084.46+Safari/536.5 - - n10k.in 200 0 0 485 395 421

2012-05-21 04:39:08 W3SVC6826 BJJI-GLOBEDNS 67.227.164.68 GET /favicon.ico - 80 - 116.203.33.229 HTTP/1.1 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/536.5+(KHTML,+like+Gecko)+Chrome/19.0.1084.46+Safari/536.5 - - n10k.in 200 0 0 17863 318 2203

3)Solicitudes de mi midlet (emulador en mi PC) (se muestran 2 solicitudes)

2012-05-21 04:43:17 W3SVC6826 BJJI-GLOBEDNS 67.227.164.68 POST /Servlet/PercentileCalculator - 80 - 116.203.33.229 HTTP/1.1 Profile/MIDP-1.0,+Configuration/CLDC-1.0 - - n10k.in 200 0 0 0 196 468

2012-05-21 04:43:25 W3SVC6826 BJJI-GLOBEDNS 67.227.164.68 POST /Servlet/PercentileCalculator - 80 - 116.203.33.229 HTTP/1.1 Profile/MIDP-1.0,+Configuration/CLDC-1.0 - - n10k.in 200 0 0 0 196 453

ANÁLISIS DE LOS LOGS

Así que traté de analizar los registros y no tuve mucho éxito al interpretarlos. La única diferencia que pude distinguir entre la solicitud del navegador y la solicitud de midlet es:

La solicitud del navegador devuelve la respuesta -> 200 0 0 17863 318 2203

La solicitud de Midlet devuelve la respuesta -> 200 0 0 0 196 453

El cuarto número (Bytes SC -> Bytes enviados) en caso de solicitud de midlet es 4. Eso es todo lo que pude distinguir. ¿Alguien podría ayudar?

ACTUALIZACIÓN 5 1 de junio de 2012 Viernes 11.33:XNUMX

1) Creé un archivo HTML en mi servidor y luego intenté acceder a él con el midlet y pude acceder a él.

2) A continuación, creé una página PHP y luego intenté acceder a ella con el midlet y pude acceder a ella.

3) Luego intenté acceder a una página JSP y obtuve una respuesta vacía.

4) Intenté acceder a todos los servlets implementados en mi servidor y siempre obtuve una respuesta vacía.

5) Traté de acceder a algunos servlets en Internet pero no pude encontrar ninguno.

INFERENCIA

Hay algo sospechoso en la forma en que mi servlet genera la página HTML. He publicado ese fragmento de código aquí. Por favor asiste.

protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try{

            response.setContentType("text/html");
        reply = response.getWriter(); 


            reply.println("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html\"><title>Nikhil D</title></head><body>hmmm</body></html>");           
           reply.close();
           reply.flush();

        }
        catch(Exception e)
        {



        }

No soy muy capaz de averiguar qué está mal aquí. Probablemente sea la forma en que mi servidor representa mis servlets/páginas JSP. ¡Ni idea!

ACTUALIZACIÓN 6: 13 DE JUNIO DE 2012

No puedo perder más tiempo en esto. Solución alternativa publicada en una respuesta a continuación

preguntado el 03 de mayo de 12 a las 18:05

En el caso 2, ¿su URL está usando https en lugar de http? -

@telmo no, mi URL es la de mi servidor y no contiene "https", es decir: xyz.ab/Servlet/PercentileCalculator El servidor siempre devuelve el mismo valor. Esto se ha hecho con fines de prueba. Sin embargo, nada es recibido por el midlet.. -

@TelmoPimentelMota He actualizado mi pregunta... si eso ayuda? -

¿Has intentado conectarte al Servlet usando otro cliente? Por ejemplo, un navegador? Si es así, ¿qué presenta el navegador? -

@TelmoPimentelMota Sí. Intenté conectarme al servlet con mi navegador. La respuesta dada por el navegador en el caso 1 y el caso 2 es la esperada... se imprime una CADENA en la página que se abre. También estoy investigando simultáneamente. Publicaré actualizaciones si encuentro algo... gracias por su ayuda... -

1 Respuestas

Entonces, después de toda esa investigación, esto es lo que hice:

1) Pasar parámetros de MIDlet a una página PHP en mi servidor.

2) Reenviar los parámetros de la página PHP a mi SERVLET

3) La página PHP recopila el resultado del SERVLET

4) MIDlet lee el resultado de la página de PHP.

Ta Dang! ¡obras!

Respondido el 13 de junio de 12 a las 13:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.