我正在使用来自TooTallNate's java websockets的this tutorial使用android(Java)来使用android上的websockets来连接ws://
,但我收到错误draft org.java_websocket.drafts.Draft_10@4560b1d0 refuses handshake
。我尝试了他们的其他草案版本,但他们都没有工作。
答案 0 :(得分:1)
首先,您想要使用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 -=-=-=- */
...
这就是破产,没有指定协议导致&#34;拒绝握手&#34;我的错误信息。
请注意上面有几个原因&#34;拒绝握手&#34;,但在我的情况下,这是缺少空协议......
答案 1 :(得分:0)
你试过broswer吗?您将在broswer上获得错误的代码。
您可以编写一个简单的js文件来启动并测试此问题是在服务器上还是在应用程序上。
这是一个演示,它不会花费你太多时间。
<script type="text/javascript">
function send() {
var url = 'ws://192.168.1.101:8080/WebSocket/echo';
var vs = new WebSocket(url);
vs.onopen = function(evt){
vs.send(te.value)
};
vs.onmessage = function(evt){
alert(evt.data);
};
}
答案 2 :(得分:0)
基本上,例如,如果您有协议“ my-protocol”
ArrayList<IProtocol> protocols = new ArrayList<IProtocol>();
protocols.add(new Protocol("my-protocol"));
//Uncomment below if you want to have a fallback
//protocols.add(new Protocol(""));
Draft_6455 my_draft = new Draft_6455(Collections.<IExtension>emptyList(), protocols);
取自here