Java websocket草案拒绝握手

时间:2016-08-30 18:19:29

标签: java android java-websocket

我正在使用来自TooTallNate's java websocketsthis tutorial使用android(Java)来使用android上的websockets来连接ws://,但我收到错误draft org.java_websocket.drafts.Draft_10@4560b1d0 refuses handshake。我尝试了他们的其他草案版本,但他们都没有工作。

3 个答案:

答案 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