首先,您要使用Draft_6455,它是当前规范,其余的可能会或可能不会在不同的服务器上可靠地工作。草稿对象的构造函数采用List<IProtocol>。如果没有指定的协议与服务器提供的协议匹配,则握手将被拒绝。
public Draft_6455( List<IExtension> inputExtensions , List<IProtocol> inputProtocols )
public Draft_6455( List<IExtension> inputExtensions , List<IProtocol> inputProtocols, int inputMaxFrameSize )
我在使用最新版本的 TooTallNate 的 Java Websockets 时遇到了与您类似的问题,我的代码是这样的:
knownExtensions = new java.util.ArrayList();
knownProtocols = new java.util.ArrayList();
if(this._protocol){
knownProtocols.add(new org.java_websocket.protocols.Protocol(this._protocol));
}
this._socket = new _WebSocket(uri, new org.java_websocket.drafts.Draft_6455(knownExtensions, knownProtocols), toHashMap(this._headers), this._timeout);
您必须至少有一个有效的协议(即使它是一个空字符串),否则您会收到您引用的上述错误。所以我将代码更改为:
...
if(this._protocol){
knownProtocols.add(new org.java_websocket.protocols.Protocol(this._protocol));
}
/* -=-=-=- NEW ADDED CODE -=-=-=- */
else {
knownProtocols.add(new org.java_websocket.protocols.Protocol(""));
}
/* -=-=-=- END NEW ADDED CODE -=-=-=- */
...
这就是问题,没有指定协议导致我出现“拒绝握手”错误消息。
请注意,上述“拒绝握手”有几个原因,但在我的情况下,是缺少空协议...