1.在网上下了一个JWCHAT1.0 版本的后台用JabberHTTPBind 和openfire绑定,登录后从openfire服务中取得rouster流的XML 的时候由于字符串很长。JabberHTTPBind 的readFromSocket 方法取得OPNFFIRE XML字符会截断,造成客户端JWCHAT 登录不上。
[code="java"]private String readFromSocket(long rid) throws IOException {
String retval = "";
char buf[] = new char[16];
int c = 0;
Response r = this.getResponse(rid);
while (!this.sock.isClosed() && !this.isStatus(SESS_TERM)) {
this.setLastActive();
try {
if (this.br.ready()) {
while (this.br.ready()
&& (c = this.br.read(buf, 0, buf.length)) >= 0)
retval += new String(buf, 0, c);
break; // got sth. to send
}
else {
if ((this.hold == 0 && r != null && System
.currentTimeMillis()
- r.getCDate() > 200)
||
/*
* makes polling clients feel a little bit more
* responsive
*/
(this.hold > 0 && ((r != null && System
.currentTimeMillis()
- r.getCDate() >= this.getWait() * 1000)
|| this.numPendingRequests() > this
.getHold() || !retval.equals("")))
|| r.isAborted()) {
log.info("readFromSocket done for " + rid);
break; // time exeeded
}
try {
Thread.sleep(READ_TIMEOUT); // wait for incoming
// packets
} catch (InterruptedException ie) {
log.error(ie.toString());
}
}
} catch (IOException e) {
log.error("Can't read from socket");
this.terminate();
}
}
if (this.sock.isClosed()) {
throw new IOException();
}
return retval;
}[/code]
这段从sockt 输入流 sockt.getInputStream() 取得数据流打印出来数据截断了不符合JABBER XML 数据 出错了
日志中:
[color=red]第一段字符[/color]
inQueue: 增值应用业务部bb公司集成业务部bb公司xx业务部bb公司集成业务部bb公司商务管理采购部bb公司
[color=red]第二段字符[/color]
inQueue: priority="14">xx支撑软件部。。。。。。。
整个XML 给截断了
不知道什么原因。
后来自己机器上架设OPENFIRE 做服务器,rouser数据较多
inQueue: producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0product0其他联系人producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0producttest0grouptest0
这段XML 完整打印出来没有截断,感觉应该和长度限制什么没有关系,怀疑和服务端响应时间什么的有关系
[b]问题补充:[/b]
我后来又试验了,用我机器做服务器,同事的机器启动JWCHAT 访问我的服务端OPEFIRE。还是没有截断。应该和你说的这个不一样的,这里的包应该也是分多个包发的吧。
注:我和我同事机器是同一个网段。被截断的服务器网段和我们不是一个网段。