websocket连接不上、报错、自动关闭,求解

asd8222687 2014-04-07 09:25:46
学WS遇到三个问题:
一:

描述:能够成功连上并调用onopen方法,并且能够收到服务器推送的消息,但是在send发送数据时,提示连接被关闭1002:An unrecoverable IOException occurred so the connection was closed
环境:window7+chrome/360浏览器+tomcat7
websocket初始化方法:
function WS(u, messageF) {
var ws = null;
var url = 'ws://localhost:8080/Auction/websocket';
if ('WebSocket' in window) {
ws = new WebSocket(url);
} else if ('MozWebSocket' in window) {
ws = new MozWebSocket(url);
}
ws.onmessage = function(m) {
messageF(m.data);
};
ws.onopen = function() {
messageF('Opened');
};
ws.onclose = function(e) {
messageF(e.code + ":" + e.reason);
};
ws.onerror = function(e) {
for ( var p in e) {
messageF(p + "=" + e[p]);
}
};
this.send = function(m) {
ws.send(m);
};
}

服务器WS:
public void onOpen(Session session, EndpointConfig conf) {
this.session = session;
RemoteEndpoint.Basic remoteEndpointBasic = session.getBasicRemote();
session.addMessageHandler(new WSMessageHandler(remoteEndpointBasic));
String message = String.format("* %s %s", nickname, "has joined.");
try {
session.getBasicRemote().sendText(message);//这条信息页面能收到
} catch (Exception e) {
}
}
public void onClose() {
String message = String
.format("* %s %s", nickname, "has disconnected.");
System.out.println(message);
}
public void onError(Throwable t){
System.out.println(t.toString());
}
}

二:
环境:android4.0+chrome+tomcat7,代码跟上面相同
描述:连不上WS,onopen方法没有被调用,onerror方法被调用,错误信息如下。之后调用onclose,正常关闭,关闭码为1006

三、
环境:android4.0+UC+tomcat7,代码跟上面相同
描述:连不上WS,onopen方法没有被调用,onerror方法也没被调用,onclose被调用,连接被正常关闭,关闭码为1006

测试用的浏览器都是支持WS的,求解啊
求大神,在线等……
...全文
35259 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jliang981 2015-12-10
  • 打赏
  • 举报
回复
我有一个简单的websocket聊天室代码,需要的话发给你。
jliang981 2015-12-10
  • 打赏
  • 举报
回复
我的聊天室程序,服务器端代码:

package com.java.servlet;

import java.io.IOException;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.logging.Logger;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/chatServlet/annotation")
public class ChatAnnotation {
	
	private Session session;  
	private Logger logger = Logger.getLogger(ChatAnnotation.class.getName());  
	private static final Set<ChatAnnotation> connections =
            new CopyOnWriteArraySet<ChatAnnotation>();
      
    @OnOpen  
    public void open(Session session) {  
        this.session = session;  
        connections.add(this);  
        logger.info("*** WebSocket opened from sessionId " + session.getId());  
    }  
      
    @OnMessage  
    public void inMessage(String message) {
    	String countMsg = connections.size() + "人同时在线";
        int startIndex = message.indexOf("!@#$%");
        String nikeName = message.substring(0, startIndex);
        String textMsg = message.substring(startIndex + 5);
        String msg1 = nikeName + ": " + textMsg;
//        String msg2 = "我: " + textMsg;
        logger.info("***"+countMsg+"  WebSocket Received from sessionId " + this.session.getId() + ": " + msg1);
        broadcast(msg1);
    }  
      
    @OnClose  
    public void end() {  
        logger.info("*** WebSocket closed from sessionId " + this.session.getId());  
        connections.remove(this);
    }  
    
    private  void broadcast(String msg) {
        for (ChatAnnotation client : connections) {
            try {
                synchronized (client) {
                    client.session.getBasicRemote().sendText(msg);
                }
            } catch (IOException e) {
            	logger.info("Chat Error: Failed to send message to client");
                connections.remove(client);
                try {
                    client.session.close();
                } catch (IOException e1) {
                    // Ignore
                }
//                String message = String.format("* %s %s",
//                        client.nickname, "has been disconnected.");
//                broadcast(message);
            }
        }
    }

}
街头小贩 2015-12-08
  • 打赏
  • 举报
回复
endpointer的代码存根

import javax.websocket.EndpointConfig;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

/**
 *
 * @author xiaofanku
 */
@ServerEndpoint("/endpoint")
public class Hello {

    @OnMessage
    public String onMessage(String message) {
        //当客户端发来消息时在此处理
        return null;
    }

    @OnClose
    public void onClose() {
        //当连接关闭时调用
    }

    @OnOpen
    public void onOpen(Session session, EndpointConfig config) {
        //当有客户端连接时调用
    }

    @OnError
    public void onError(Throwable t) {
    }
    
}

不明白怎么写看一看这篇文章:https://netbeans.org/kb/docs/javaee/maven-websocketapi.html
街头小贩 2015-12-08
  • 打赏
  • 举报
回复
你贴的服务器端并没有接受消息的OnMessage方法
街头小贩 2015-12-08
  • 打赏
  • 举报
回复 1

function WS(u, messageF) {
        var ws = null;
        var url = 'ws://localhost:8080/Auction/websocket';
        if ('WebSocket' in window) {
                ws = new WebSocket(url);
        } else if ('MozWebSocket' in window) {
                ws = new MozWebSocket(url);
        }
        ws.onmessage = function(m) {
                messageF(m.data);
        };
        ws.onopen = function() {
                messageF('Opened');
        };
        ws.onclose = function(e) {
                messageF(e.code + ":" + e.reason);
        };
        ws.onerror = function(e) {
                for ( var p in e) {
                        messageF(p + "=" + e[p]);
                }
        };
        ws.send = function(m) {
                ws.send(m);//m在哪定义的
        };
}
业余草 2014-06-21
  • 打赏
  • 举报
回复
写法有问题的哦,open里的代码先去掉,我有例子的,有时间了 发给你
asd8222687 2014-04-07
  • 打赏
  • 举报
回复
求助啊,,没人吗。。

39,118

社区成员

发帖
与我相关
我的任务
社区描述
HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。
社区管理员
  • HTML5社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧