我正在为服务器开发一个Android客户端,其中要求是将音频流连续交换到基于WebSockets的服务器。
与Web套接字连接时,android客户端会抛出以下错误。
关闭草案org.java_websocket.drafts.Draft_10@b2fe9b40拒绝 握手
但我尝试使用以下网络套接字uri。连接成功。 WS://echo.websocket.org
代码:
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();
我尝试了浏览器的echo测试,用于我使用的Web套接字(ws:// serverIP:9090 / WebRtc / serverendpoint)。它正确连接。 但是,当我从手机或模拟器尝试时,没有任何作用。
请帮我解决这个问题。
答案 0 :(得分:17)
我刚刚找到了另一种解决这个问题的简单方法。
更改以下行
mWebSocketClient = new WebSocketClient(uri){
到
mWebSocketClient = new WebSocketClient(uri, new Draft_17()){
我在我的Serverlogs中找到了提示:
用户代理:[unset]请求WebSocket版本[8],Jetty支持版本:[13]
正如您在下面的链接中看到的,版本8是Draft_10,版本13是Draft_17。
答案 1 :(得分:2)
我发现了这个问题。
实际上Java提供的Web套接字jar文件存在问题。
而不是我用过的 Autobahn (Android特定网络套接字开源https://github.com/tavendo/AutobahnAndroid)。
现在可以连接Web套接字服务器了。