j2me(BB)中的socket输入流问题

时间:2011-08-20 20:20:46

标签: sockets blackberry java-me xmpp

我正在使用JXA为BB运行XMPP客户端,但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 个答案:

答案 0 :(得分:1)

读取超时意味着在超时期限内没有数据到达。没别了。

你的代码在其他方面是错误的:你假设读取填充缓冲区,并在构造String时忽略'len'的正值,所以你自己传递垃圾。