проблема входного потока сокета в j2me (BB) - PullRequest
1 голос
/ 21 августа 2011

Я работаю на XMPP-клиенте для BB с JXA, но JXA API требует времени для чтения из входного потока и ошибки тайм-аута через 2 минуты.Я написал отдельную программу для сокетов в J2ME и выполнялся в симуляторе BB, он мог обмениваться XML, но входной поток не завершается из цикла while, зависает при чтении.Пожалуйста, смотрите код ниже.

class SocketThread extends Thread
{
    public void run()
    {

          ConnectionFactory connFact = new ConnectionFactory();
          ConnectionDescriptor connDesc;
          connDesc = connFact.getConnection("socket://xxxxxx.p1.im:5222");
          if (connDesc != null)
          {
              SocketConnection httpConn;
              httpConn = (SocketConnection)connDesc.getConnection();
              try
              {
                 InputStream is = httpConn.openInputStream();
                 OutputStream os = httpConn.openOutputStream();

                 String a = "<?xml version=\"1.0\"?><stream:stream to=\"xxxxx.p1.im\" xml:lang=\"en\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" version=\"1.0\">";

                 os.write(a.getBytes());

                 byte[] b = new byte[1024];
                 int len =0;
                            while ((len = is.read(b)) > 0) {


                                String str = new String(b);

                                 System.out.println("Server n: " + str);


                                 }

                  UiApplication.getUiApplication().invokeLater(new Runnable()
                  {
                      public void run()
                      {
                          Dialog.alert("got response xml stream..: "  
                                        );
                      }
                   });
               } 
               catch (IOException e) 
               {
                 System.err.println("Caught IOException: " 
                      + e.getMessage());
               }
          }
    }
}

Выше программа не выходит из цикла, пока не истечет время ожидания, пожалуйста, помогите мне исправить эту проблему, чтобы двигаться вперед.

Заранее спасибо.

1 Ответ

1 голос
/ 21 августа 2011

Тайм-аут чтения означает, что данные не поступили в течение периода ожидания.Ничего другого.

Однако ваш код неверен другими способами: вы предполагаете, что чтение заполнило буфер, и игнорируете положительные значения 'len' при создании String, поэтому вы передаете себя как мусор.

...