Я работаю на Android (Java) с использованием TooTallNate's java websockets от this tutorial потреблять WebSockets на андроид, чтобы соединиться с ws://
, но я получаю сообщение об ошибке draft [email protected] refuses handshake
. Я попробовал другие варианты, но ни один из них не работал.Java проект WebSocket отказывается рукопожатия
ответ
Вы попробовали это на 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);
};
}
У сервера уже есть отлично работающая версия браузера/веб-сайта, поэтому я предполагаю, что сервер в порядке, я делаю родной андроидной копии сайта. – CookieMonster
Прежде всего, вы хотите использовать Draft6455, это текущая спецификация, остальные могут или не могут работать на разных серверах надежно.
Однако, я столкнулся с подобной проблемой с новейшей версией Java WebSockets TooTallNate, мой код был так:
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, вы MUST имеют хотя бы один действительный протокол (даже если это пустая строка), или вы получаете указанную выше ошибку, на которую вы ссылаетесь. Поэтому я изменил код, чтобы быть:
...
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, он добавляет дополнительную строку к вашей конечной точке. Таким образом, без этого вы попадаете в неправильную конечную точку, которая действительна только для браузера (ожидаемый http 200 вместо 101) – Jimmy