当前位置:编程学习 > JAVA >>

ANDROID WEBSOCKET 连接超时 net.rcode.wsclient

public  void startwsclinet() {
// final List<String> messages=new ArrayList<String>();
ws = new AndroidWebSocket(getString(R.string.wsStr));
ws.addRequestHeader("Origin", getString(R.string.wsHeader));
ws.setWireProtocol(WireProtocolDraft76.INSTANCE);

ws.addListener(new WebSocket.EventListener() {
@Override
public void handleEvent(Event event) {
if (event.getType() == WebSocket.EVENT_MESSAGE) {
//省略

}else {
System.out.println("EVENT: " + event);
}

if (event.getType() == WebSocket.EVENT_READYSTATE) {

if (event.getReadyState() == WebSocket.CONNECTING) {
intentB.putExtra("WebSocketStatus",
"CONNECTING");
sendBroadcast(intentB);
}
if (event.getReadyState() == WebSocket.OPEN) {
intentB.putExtra("WebSocketStatus",
"OPEN");
sendBroadcast(intentB);

}
if (event.getReadyState() == WebSocket.CLOSING) {
intentB.putExtra("WebSocketStatus",
"CLOSING");
sendBroadcast(intentB);
}
if (event.getReadyState() == WebSocket.CLOSED) {
intentB.putExtra("WebSocketStatus",
"CLOSED");
sendBroadcast(intentB);
startwsclinet();
}

}

if (event.getType() == WebSocket.EVENT_ERROR) {
System.out.println("EVENT_ERROR: " + event.getError());
intentB.putExtra("WS_ERROR", event.toString());
sendBroadcast(intentB);
ws.close();
return;
}

}
});
ws.start();
setUserName();
}
===============================================================================
异常:
 java.net.SocketException: recvfrom failed: ETIMEDOUT (Connection timed out)


===============================================================================
现象:以上代码用于ANDROID的客户端的WEBSOCKET连接,当连接关闭时,自动重新连接。现在问题时,手机由3G切换WIFI时,连接会CLOSE(),当然会执行里面的语句;而当由WIFI切换成3G时,状态不改变。不会执行CLOSE里面的重新连接的语句,有时虽然显示为OPEN,但这种情况不能收发消息。大约二十分钟,连接会正常切换成3G连接的WEBSOCKET,并且收发消息也正常。 --------------------编程问答-------------------- 我也是发现这个原因,每次连接中断后要20分钟才能连接,楼主有没有发现是什么原因
补充:Java ,  Eclipse
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,