From 0699931fd4f1260a49d56939e244111a855d3cd2 Mon Sep 17 00:00:00 2001 From: "let5sne.win10" Date: Thu, 12 Feb 2026 22:37:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20MjpegServer.kt=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 确保所有源代码文件完整 --- .../src/main/java/com/usbwebcam/MjpegServer.kt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/android-app/app/src/main/java/com/usbwebcam/MjpegServer.kt b/android-app/app/src/main/java/com/usbwebcam/MjpegServer.kt index 11935fe..20cc08f 100644 --- a/android-app/app/src/main/java/com/usbwebcam/MjpegServer.kt +++ b/android-app/app/src/main/java/com/usbwebcam/MjpegServer.kt @@ -60,7 +60,7 @@ class MjpegServer(private val port: Int) { val iterator = clients.iterator() while (iterator.hasNext()) { val handler = iterator.next() - if (handler.isSocketActive()) { + if (handler.isAlive()) { handler.sendFrame(frame) } else { iterator.remove() @@ -80,6 +80,7 @@ class MjpegServer(private val port: Int) { clients.forEach { it.close() } clients.clear() serverSocket = null + serverThread = null } private class ClientHandler(private val socket: Socket) : Thread() { @@ -93,17 +94,17 @@ class MjpegServer(private val port: Int) { clientStream = os socket.setSoTimeout(5000) - // 读取HTTP请求 (清空缓冲区) + // 读取HTTP请求 val buffer = ByteArray(1024) socket.getInputStream().read(buffer) - // 发送MJPEG流头 - 正确的HTTP格式 + // 发送HTTP响应头 val header = byteArrayOf( *("HTTP/1.1 200 OK\r\n").toByteArray(), *("Content-Type: multipart/x-mixed-replace; boundary=boundary\r\n").toByteArray(), *("Cache-Control: no-cache\r\n").toByteArray(), *("Connection: close\r\n").toByteArray(), - *("\r\n").toByteArray() // 空行表示header结束 + *("\r\n").toByteArray() ) os.write(header) @@ -115,10 +116,10 @@ class MjpegServer(private val port: Int) { } fun sendFrame(frame: ByteArray) { - if (!initialized || clientStream == null) return + if (!initialized) return try { - // MJPEG frame header with \r\n + // MJPEG frame header val header = byteArrayOf( *("--boundary\r\n").toByteArray(), *("Content-Type: image/jpeg\r\n").toByteArray(), @@ -128,7 +129,7 @@ class MjpegServer(private val port: Int) { clientStream?.write(header) clientStream?.write(frame) - clientStream?.write(("\r\n").toByteArray()) + clientStream?.write("\r\n".toByteArray()) clientStream?.flush() } catch (e: Exception) { close() @@ -143,7 +144,7 @@ class MjpegServer(private val port: Int) { } } - fun isSocketActive(): Boolean { + fun isAlive(): Boolean { return !socket.isClosed && socket.isConnected } }