android-studio - 预期 HTTP 101 响应,但在尝试连接 echo/websocket 时为“200 OK”
问题描述
我正在开发一个用本机 Java 编写的 android 应用程序。我在这个应用程序中使用服务器,所以我正在使用 WebSockets。我收到此错误
java.net.ProtocolException: Expected HTTP 101 response but was '200 OK'
在尝试连接到 ws://echo.websocket.org 时,我不知道为什么。我是使用 WebSockets 的新手,所以我真的迷路了。
那是我尝试建立连接的活动。重要的部分在 InitiateSocketConnection() 函数中
package com.example.rockpaperscissors;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.widget.Toast;
import org.json.JSONException;
import org.json.JSONObject;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.WebSocket;
import okhttp3.WebSocketListener;
public class Loby extends AppCompatActivity {
private String name;
private WebSocket webSocket;
private String Server_Path = "ws://echo.websocket.org";
private RecyclerView recyclerView;
private PlayersAdapter playersAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loby);
name = getIntent().getStringExtra("name");
InitiateSocketConnection();
}
private void InitiateSocketConnection() {
OkHttpClient client = new OkHttpClient().newBuilder().build();
Request request = new Request.Builder().url(Server_Path).build();
webSocket = client.newWebSocket(request,new Socket_Listener());
client.dispatcher().executorService().shutdown();
}
private class Socket_Listener extends WebSocketListener
{
@Override
public void onOpen(WebSocket webSocket, Response response) {
super.onOpen(webSocket, response);
runOnUiThread(()->
{
Toast.makeText(Loby.this,"Socket connected successfully!",Toast.LENGTH_LONG).show();
initializeView();
});
}
@Override
public void onMessage(WebSocket webSocket, String text) {
super.onMessage(webSocket, text);
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, @Nullable Response response) {
super.onFailure(webSocket, t, response);
runOnUiThread(()->
{
Throwable err = t;
Toast.makeText(Loby.this, "Socket was not connected!", Toast.LENGTH_LONG).show();
});
}
}
private void initializeView() {
recyclerView = findViewById(R.id.name_list);
playersAdapter = new PlayersAdapter(getLayoutInflater());
recyclerView.setAdapter(playersAdapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("name",name);
playersAdapter.addItem(jsonObject);
webSocket.send(jsonObject.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
}
我认为这不是问题,但我允许在清单中使用互联网,这是我在 build.Gradle 上的相关植入:
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
谢谢!
解决方案
推荐阅读
- amazon-web-services - AWS Cloudformation 将 Amplify 绑定到 bitbucket 存储库
- r - 删除 R 中的空文件:if (!file.size(x) == 0) { 中的错误:需要 TRUE/FALSE 的缺失值
- html - 怎么做
材料 ui 抽屉演示中的 100% 高度 - android - LazyColumn 项目位置
- batch-file - 批处理文件在 Windows 10 中无法正确运行
- javascript - 浏览器卡住上传大文件
- x86-64 - 是否可以在具有 64 位处理器的 32 位操作系统上运行 64 位代码?
- google-app-engine - Google App Engine:应用引擎仪表板与计费导出之间的不可预测的成本和差异
- javascript - 为什么我没有必要的 jQuery DataTables 分页按钮?
- variables - 变量的SSIS值不变