我正在使用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());
}
}
}
}
以上程序没有退出循环,除非它超时,请帮我解决这个问题继续前进。
提前致谢。
答案 0 :(得分:1)
读取超时意味着在超时期限内没有数据到达。没别了。
你的代码在其他方面是错误的:你假设读取填充缓冲区,并在构造String时忽略'len'的正值,所以你自己传递垃圾。