Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets j2me中的套接字输入流问题(BB)_Sockets_Blackberry_Java Me_Xmpp - Fatal编程技术网

Sockets j2me中的套接字输入流问题(BB)

Sockets j2me中的套接字输入流问题(BB),sockets,blackberry,java-me,xmpp,Sockets,Blackberry,Java Me,Xmpp,我正在使用JXA为BB开发XMPP客户机,但JXAAPI需要时间从inputstream读取数据,并在2分钟后通过超时错误。我在J2ME中编写了独立的socket程序,并在BB模拟器中执行,它可以交换XML,但inputstream并没有退出while循环,而是挂起读取。请参阅下面的代码 class SocketThread extends Thread { public void run() { ConnectionFactory connFact = n

我正在使用JXA为BB开发XMPP客户机,但JXAAPI需要时间从inputstream读取数据,并在2分钟后通过超时错误。我在J2ME中编写了独立的socket程序,并在BB模拟器中执行,它可以交换XML,但inputstream并没有退出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());
               }
          }
    }
}
class SocketThread扩展线程
{
公开募捐
{
ConnectionFactory connFact=新的ConnectionFactory();
ConnectionDescriptor connDesc;
connDesc=connFact.getConnection(“socket://xxxxxx.p1.im:5222");
如果(connDesc!=null)
{
插座连接httpConn;
httpConn=(SocketConnection)connDesc.getConnection();
尝试
{
InputStream is=httpConn.openInputStream();
OutputStream os=httpConn.openOutputStream();
字符串a=“”;
write(a.getBytes());
字节[]b=新字节[1024];
int len=0;
而((len=is.read(b))>0){
字符串str=新字符串(b);
System.out.println(“服务器n:+str”);
}
UiApplication.getUiApplication().invokeLater(新的Runnable())
{
公开募捐
{
警报(“已获取响应xml流..:”
);
}
});
} 
捕获(IOE异常)
{
System.err.println(“捕获的IOException:
+e.getMessage());
}
}
}
}
以上程序不会退出循环,除非它超时,请帮助我解决此问题以继续


提前感谢。

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


但是,您的代码在其他方面是错误的:您假设读取填充了缓冲区,并且在构造字符串时忽略了“len”的正值,因此您将自己传递为垃圾邮件。

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


但是,您的代码在其他方面是错误的:您假设读取填充了缓冲区,并且在构造字符串时忽略了“len”的正值,因此您传递的是垃圾邮件。

上述代码能够从XMPP服务器接收xml流,在阅读了两个完整的xml流之后,我的问题是它没有退出。“您的代码在其他方面是错误的”-补充到这一点-流在使用后应该始终关闭。在您的情况下,放置结束代码的最佳位置是
finally
block(现在不存在)。好吧,伙计们,修复了BB中的问题,在套接字URL的末尾,“deviceside=true”参数是必须的,检查了演示应用程序并得到了解决,谢谢您的帮助。@Balaji,您很幸运。由于我所说的原因,代码仍然是错误的。我的朋友,这只是我粘贴在这里的示例片段,我同意我粘贴了错误的代码,你是一个聪明人:)在阅读了两个完整的xml流后,上面的代码能够从XMPP服务器接收xml流,这是我的问题。“您的代码在其他方面是错误的”-要补充一点-流在使用后总是应该关闭。在您的情况下,放置关闭代码的最佳位置是
finally
块(现在不存在)。好了,伙计们,修复了BB中的问题,在套接字URL的末尾“deviceside=true”“参数是必须的,检查了演示应用程序并在您的帮助下解决了thnx。@Balaji,您很幸运。由于我所说的原因,代码仍然是错误的。我的朋友,这只是我粘贴在这里的示例片段,我同意我粘贴了错误的代码,而你是一个聪明人:)