Java websocket稿件拒绝握手

问题描述:

我正在使用Android(Java)TooTallNate's java websocketsthis tutorial使用android上的websockets与ws://连接,但我收到错误draft [email protected] refuses handshake。我尝试了他们的其他草稿版本,但他们都没有工作。Java websocket稿件拒绝握手

+2

是你设法解决这个问题? – Andrii

+0

2017年底我仍然面临这个 – Jimmy

+0

找到了解决办法。在端点的末尾添加/ websocket。当您使用ShockJs时,它将额外的字符串添加到您的端点。所以,如果没有,你打错了端点,这是有效的只适用于基于浏览器的应用程序(预期http200而不是101) – Jimmy

你试过这个在浏览器上吗?你会在大衣上看到一个错误的代码。

您可以编写一个简单的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); 
    }; 
} 

+0

服务器已经有一个完美的工作浏览器/网站版本,所以我假设服务器是好的,我做了一个网站的原生android副本。 – CookieMonster

首先,你要使用的Draft6455,它是当前规格,其余可能会或可能不会在不同服务器上运行可靠。

不过,我遇到了与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); 

问题结束了,当你在knownProtocols列表发送,您必须至少有一个有效的协议(即使它是一个空字符串),或者你得到你引用的上述错误。所以我改变我的代码是:

... 
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 -=-=-=- */ 
... 

这是什么坏了,没有指定协议导致“拒绝握手”错误消息对我来说。

请注意,有几个原因,上述的“拒绝握手”,但在我的情况下,它是缺失的空白协议...