OKHTTP WebSocket schlägt sofort nach der Verbindung fehlAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 OKHTTP WebSocket schlägt sofort nach der Verbindung fehl

Post by Anonymous »

Ich habe versucht, Websockets in meiner Android -App zum Arbeiten zu bringen. Ich verwende OKHTTP WebSockets, einen Apache -Proxy und einen Knotenserver. Ich habe endlich eine Verbindung bekommen, aber sie verbindet sich und innerhalb weniger Sekunden bekomme ich den Onfailure -Rückruf von Okhttp ohne Ursache oder Nachricht an das Throwable und die Antwort ist null. Ich kann nichts sehen, was dazu führen würde, dass die Onfailure läuft. Ich bekomme keinen Rückruf zum Onclose oder Onclosing, nur für die Onfailure. Mein Setup ist ziemlich einfach, da dies ein Test ist, bevor versucht wird, ihn in meine Haupt -App zu implementieren ... < /p>
SocketConnect.Kt
class SocketConnect
private val logger by taggedLogger("Call:SocketConnect")
private val client = OkHttpClient()
private val request = Request.Builder().url("https://myserverhere").build()
private val ws = client.newWebSocket(request, SocketConnectListener())

private inner class SocketConnectListener: WebSocketListener() {
override fun onOpen(webSocket: WebSocket, response: Response) {
logger.i { "SocketConnect onOpen" }
super.onOpen(webSocket, response)
}
override fun onClosed(webSocket: WebSocket, code: Int, reason: String) {
logger.i { "SocketConnect onClosed, code: $code, reason: $reason" }
}
override fun onMessage(webSocket: webSocket, text: String) {
logger.i { "SocketConnect onMessage $text" }
}
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response) {
logger.i { "SocketConnect onFailure: cause ${t.cause}, message: ${t.message}" }
logger.i { "SocketConnect onFailure: response $response" }
}
override fun onClosing(webSocket: WebSocket, code: Int, reason: String) {
logger.i { "SocketConnect onClosing: code: $code, reason: $reason" }
}
}
}
< /code>
Dann leitet meine Apache -Konfiguration alle Upgrade -Anforderungen an meinen Knotenserver weiter ... < /p>

//...server name and whatnot
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/?(.*) "ws://127.0.0.1:3005/$1" [P,L]

RewriteCond %{HTTPS:Upgrade} websocket [NC]
RewriteCond %{HTTPS:Connection} upgrade [NC]
RewriteRule ^/?(.*) "ws://127.0.0.1:3005/$1" [P,L]

//...ssl stuff

< /code>
Und schließlich mein einfacher Knotenserver ... < /p>
const https = require('https')
const express = require('express')
const bodyParser = require('body-parser')
const webSocket = require('ws')
const port = 3005
const wss = new webSocket.Server({noServer: true})

const app = express()
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true})
app.get('/', (req, res) => {
res.send("Server is up and running")
})

const server = app.listen(port, (err) => {
if(error) return console.log(`Error: ${error}`)
console.log(`Server running on port ${port}`)
})

server.on('upgrade', (request, socket, head) => {
console.log('upgrade request received')
wss.handleUpgrade(request, socket, head, (ws) => {
wss.emit('connection', ws, request)
})
})

wss.on('connection', (ws, req) => {
console.log("connection event happened.")
ws.on('message', (message) => {
console.log("message received")
console.log(message)
})
ws.on('close', () => {
console.log("close event happened")
})
})
< /code>
Nun, was ich auf meinem Server bekomme, ist < /p>
upgrade request received
connection event happened
close event happened
< /code>
und Android logcat < /p>
(OkHttp https://myservernamehere/...:345) SocketConnect onOpen
I Compiler allocated 4666KB to compile void android.view.ViewRootImpl.performTraversals()
E (OkHttp https://myservernamehere/...:345) SocketConnect onFailure: cause null, message: null
(OkHttp https://myservernamehere/...:345) SocketConnect onFailure: response null
< /code>
Also verbindet der Socket mit dem Knotenserver, aber fast sofort ruft er die Onfailure in Okhttp und die Verbindung geschlossen, aber ohne Grund, keine Ursache, keine Nachricht, nichts, einfach gescheitert. Vielen Dank an < /p>
Ich habe dies auch in der Logcat gefunden, obwohl ich mir nicht sicher bin, wie es einen EOF-Fehler in einer Systemdatei bekommt. Ich kann nicht steuern, was in dieser Datei ist ... < /p>

java.io.eofException 2025-03-03 13: 40: 40: 40: 40: 40: 40: 41.128 30775-30817. />com.mine.webrtc.sample W at
okio.RealBufferedSource.require(RealBufferedSource.kt:202) 2025-03-03
13:40:41.128 30775-30817 System.err

com.mine.webrtc.sample W at
okio.realbuffenedSource.readbyte(realbuffenedSource.kt:212) 2025-03-03
13:40:41.128 30775-30817 System.err
com.mine />okhttp3.internal.ws.websocketreader.Readheader(websocketreader.kt:119)
2025-03-03 13: 40: 41.128 30775-30817 System.err

/>okhttp3.internal.ws.websocketreader.ProcessNextFrame(Websocketreader.KT:102) 2025-03-03 13: 40: 41.128 30775-30817 System.err
Com.Mine.webrtc.sam. />okhttp3.internal.ws.Realwebsocket.Looproader(realwebsocket.kt:293)
2025-03-03 13: 40: 41.128 30775-30817 System.err

/>okhttp3.internal.ws.Realwebsocket$Connect$1.onresponse(realwebsocket.KT:195) 2025-03-03 13: 40: 41.128 30775-30817 System.err

.mine />okhttp3.internal.connection.realcall$asynccall.run(realcall.kt:519)
2025-03-03 13: 40: 41.129 30775-30817 System.err

/>java.util.concurrent.threadpoolexecutor.runworker(Threadpoolexecutor.java:1145)
2025-03-03 13: 40: 41.129 30775-30817 System.err

.mine />java.util.concurrent.threadpoolexecutor$worker />java.lang.thread.run(Thread.java:1012)
< /blockquote>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post