From 11284bdd053bda5474ee2fb52d0bea4b5506daec Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Fri, 23 Jan 2026 23:37:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96:=20`Socket`=E9=80=9A?= =?UTF-8?q?=E9=81=93`TCP`/`UDP`=E8=AF=B7=E6=B1=82=E6=96=B9=E5=BC=8F=20#684?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sms/forwarder/utils/sender/SocketUtils.kt | 32 +++++++------------ 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/SocketUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/SocketUtils.kt index 89965510..1fb16451 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/SocketUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/SocketUtils.kt @@ -114,8 +114,7 @@ class SocketUtils { output.flush() val response = if (setting.response.isEmpty()) "" else input.readLine() ?: "" - val status = - if (setting.response.isEmpty() || response.contains(setting.response)) 2 else 0 + val status = if (setting.response.isEmpty() || response.contains(setting.response)) 2 else 0 SendUtils.updateLogs(logId, status, response) SendUtils.senderLogic(status, msgInfo, rule, senderIndex, msgId) @@ -143,17 +142,8 @@ class SocketUtils { socket.soTimeout = timeout val address = java.net.InetAddress.getByName(setting.address) - val uuid = UUID.randomUUID().toString() - - val body = mapOf( - "id" to uuid, - "payload" to message, - "ts" to System.currentTimeMillis() - ) - - val data = Gson().toJson(body) - .toByteArray(Charset.forName(setting.outCharset)) + val data = message.toByteArray(Charset.forName(setting.outCharset)) val packet = java.net.DatagramPacket( data, data.size, @@ -164,27 +154,27 @@ class SocketUtils { repeat(retry) { index -> try { socket.send(packet) - Log.d(TAG, "UDP send ${index + 1}/$retry id=$uuid") + Log.d(TAG, "UDP send ${index + 1}/$retry") val buf = ByteArray(1024) val ackPacket = java.net.DatagramPacket(buf, buf.size) socket.receive(ackPacket) - val ackText = String( + val response = String( ackPacket.data, 0, ackPacket.length, Charset.forName(setting.inCharset) ) + Log.d(TAG, "UDP received ACK from ${ackPacket.address}:${ackPacket.port}") + Log.d(TAG, "UDP ACK data: $response") - val ack = Gson().fromJson(ackText, Map::class.java) - if (ack["ack"] == uuid) { - SendUtils.updateLogs(logId, 2, "UDP ACK OK") - SendUtils.senderLogic(2, msgInfo, rule, senderIndex, msgId) - socket.close() - return@withContext - } + val status = if (setting.response.isEmpty() || response.contains(setting.response)) 2 else 0 + SendUtils.updateLogs(logId, status, response) + SendUtils.senderLogic(status, msgInfo, rule, senderIndex, msgId) + socket.close() + return@withContext } catch (e: java.net.SocketTimeoutException) { Log.w(TAG, "UDP ACK timeout, retry...: ${e.message}") } catch (e: Exception) {