我正在开发一个 ktor 项目,一切都运行良好。我启动了服务器,它在端口 8080 上工作正常,但现在由于某种原因突然停止工作。我杀死了任务并尝试了一切,我不确定出了什么问题。我尝试重新安装 IntelliJ Idea,但仍然面临同样的问题。我尝试使用 127.0.0.1 , 0.0.0.0 ,本地主机,但他们都不知道该怎么做。我在这件事上浪费了大约2个小时。我尝试过更改端口、阻止防火墙和防病毒软件。
我也遇到了同样的问题,结果发现是因为我安装了 HttpsRedirect 和 HSTS 插件。因此,它拒绝处理 http 请求,并且由于我没有本地主机或我的本地 IP 的任何证书,所以它不起作用。
在本地运行时禁用这两个插件使事情对我有用。
我在使用 Ktor 时经常遇到同样的问题,这令人沮丧。然后我将发布以下可能的修复方法,您应该按顺序尝试并阅读步骤。我将考虑您正在一台独特的计算机上为您的 Android 应用程序运行 WebSocket 服务器和 WebSocket 客户端。
您正在使用相同的 IP 运行服务器端和客户端 它不应该工作,因为客户端无法连接到 服务器。当我测试一个需要服务器端的项目时 客户端我使用我的计算机运行 Android 应用程序和笔记本电脑 运行服务器端。如果这不是您的情况,那么,请执行以下操作 没注意。
在客户端,当你创建HttpClient的实例时, 你是否将任何值传递给客户端作为引擎,或者你只是简单地去 直接用lambda?根据我的经验,当我创建 HttpClient 实例,仅适用于以下两个:
val client = HttpClient {
install(WebSockets)
}
或
val client = HttpClient(CIO){
install(WebSockets)
}
不适合我的引擎是:
val client = HttpClient(OkHttp) {
install(WebSockets)
}
最后,当你使用过去的客户端创建WebSocket时 例如,你应该使用
client.ws(
HttpMethod.Get,
"localhost",
8080,
"/"
)
{
//Client code
}
而不是 client.wss。那是因为在本地连接中,您的客户端 不要使用 TLS 安全性进行连接,否则会引发异常。如果 您正在将服务器端部署在具有 TLS 安全性的托管中 作为Heroku,那么你可以使用wss,因为客户端 将使用 TLS 证书进行连接。
希望我的回答可以帮到你。祝你好运!
对于 Android 开发者:如果在 android-studio-emulator 上运行应用程序,则将
http://localhost:8080/
替换为 http://10.0.2.2:8080/