我正在为服务器开发一个 Android 客户端,该客户端要求持续将音频流交换到基于 WebSockets 的服务器。
当与 web 套接字连接时,android 客户端抛出以下错误。
Closed draft org.java_websocket.drafts.Draft_10@b2fe9b40 refuses handshake
但我尝试使用以下网络套接字 uri。连接成功。 ws://echo.websocket.org
Code:
URI uri;
try {
// uri = new URI(
// "ws://echo.websocket.org");
uri = new URI(
"ws://serverIP:9090/WebRtc/serverendpoint");
} catch (URISyntaxException e) {
e.printStackTrace();
return;
}
mWebSocketClient = new WebSocketClient(uri) {
@Override
public void onOpen(ServerHandshake serverHandshake) {
Log.i("Websocket", "Opened");
mWebSocketClient.send("Hello from " + Build.MANUFACTURER + " "
+ Build.MODEL);
}
@Override
public void onMessage(String s) {
final String message = s;
runOnUiThread(new Runnable() {
@Override
public void run() {
TextView textView = (TextView) findViewById(R.id.messages);
textView.setText(textView.getText() + "\n" + message);
}
});
}
@Override
public void onClose(int i, String s, boolean b) {
Log.i("Websocket", "Closed " + s);
}
@Override
public void onError(Exception e) {
Log.i("Websocket", "Error " + e.getMessage());
}
};
mWebSocketClient.connect();
我尝试从浏览器对我使用过的网络套接字(ws://serverIP:9090/WebRtc/serverendpoint)进行回显测试。它正在正确连接。 但是当我从移动设备或模拟器上尝试时,没有任何效果。
请帮我解决这个问题。
最佳答案
我只是找到了另一种简单的方法来解决这个问题。
改变下一行
mWebSocketClient = new WebSocketClient(uri){
到
mWebSocketClient = new WebSocketClient(uri, new Draft_17()){
我在我的服务器日志中发现了提示:
User Agent: [unset] requested WebSocket version [8], Jetty supports version: [13]
正如您在下面的链接中看到的,版本 8 是 Draft_10,版本 13 是 Draft_17。
关于android - Android 客户端的 Web 套接字连接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25802290/