Java websocket稿件拒绝握手
我正在使用Android(Java)TooTallNate's java websockets从this tutorial使用android上的websockets与ws://
连接,但我收到错误draft [email protected] refuses handshake
。我尝试了他们的其他草稿版本,但他们都没有工作。Java websocket稿件拒绝握手
你试过这个在浏览器上吗?你会在大衣上看到一个错误的代码。
您可以编写一个简单的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);
};
}
服务器已经有一个完美的工作浏览器/网站版本,所以我假设服务器是好的,我做了一个网站的原生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 -=-=-=- */
...
这是什么坏了,没有指定协议导致“拒绝握手”错误消息对我来说。
请注意,有几个原因,上述的“拒绝握手”,但在我的情况下,它是缺失的空白协议...
是你设法解决这个问题? – Andrii
2017年底我仍然面临这个 – Jimmy
找到了解决办法。在端点的末尾添加/ websocket。当您使用ShockJs时,它将额外的字符串添加到您的端点。所以,如果没有,你打错了端点,这是有效的只适用于基于浏览器的应用程序(预期http200而不是101) – Jimmy