From 3e3d2dcf709f66b6cd9bc7be8b6a5fcf8c393f7a Mon Sep 17 00:00:00 2001 From: tursom Date: Sat, 26 Oct 2019 09:14:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20UDP=20=E5=B9=BF=E6=92=AD?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datagram/broadcast/BroadcastServer.kt | 49 +++++++++++++++++++ .../cn/tursom/datagram/client/UdpClient.kt | 9 +--- .../main/kotlin/cn/tursom/utils/TokenUtil.kt | 4 +- 3 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 socket/src/main/kotlin/cn/tursom/datagram/broadcast/BroadcastServer.kt diff --git a/socket/src/main/kotlin/cn/tursom/datagram/broadcast/BroadcastServer.kt b/socket/src/main/kotlin/cn/tursom/datagram/broadcast/BroadcastServer.kt new file mode 100644 index 0000000..b20fcd7 --- /dev/null +++ b/socket/src/main/kotlin/cn/tursom/datagram/broadcast/BroadcastServer.kt @@ -0,0 +1,49 @@ +package cn.tursom.datagram.broadcast + +import cn.tursom.core.toUTF8String +import cn.tursom.datagram.UdpPackageSize.LANNetLen +import java.lang.Thread.sleep +import java.net.DatagramPacket +import java.net.DatagramSocket +import java.net.InetAddress +import java.util.* +import kotlin.concurrent.thread + +class BroadcastServer(val port: Int, val bufSize: Int = LANNetLen) { + private val socket = DatagramSocket() + private val server by lazy { DatagramSocket(port) } + private val buffer = DatagramPacket(ByteArray(bufSize), bufSize) + + constructor(port: Int) : this(port, LANNetLen) + + private fun send(packet: DatagramPacket) { + socket.send(packet) + } + + fun send(packet: ByteArray) { + send(packet, 0, packet.size) + } + + fun send(packet: ByteArray, offset: Int = 0, size: Int = packet.size) { + send(DatagramPacket(packet, offset, size, broadcastInetAddr, port)) + } + + fun recv(): ByteArray { + server.receive(buffer) + return Arrays.copyOfRange(buffer.data, 0, buffer.length) + } + + fun recvBuffer(): DatagramPacket { + server.receive(buffer) + return buffer + } + + companion object { + const val BROADCAST_IP = "255.255.255.255" + @JvmStatic + val broadcastInetAddr = InetAddress.getByName(BROADCAST_IP) + + @JvmStatic + fun takeOut(packet: DatagramPacket) = Arrays.copyOfRange(packet.data, 0, packet.length) + } +} \ No newline at end of file diff --git a/socket/src/main/kotlin/cn/tursom/datagram/client/UdpClient.kt b/socket/src/main/kotlin/cn/tursom/datagram/client/UdpClient.kt index 6df220e..47661f6 100644 --- a/socket/src/main/kotlin/cn/tursom/datagram/client/UdpClient.kt +++ b/socket/src/main/kotlin/cn/tursom/datagram/client/UdpClient.kt @@ -1,5 +1,6 @@ package cn.tursom.datagram.client +import cn.tursom.datagram.UdpPackageSize.defaultLen import java.io.Closeable import java.net.DatagramPacket import java.net.DatagramSocket @@ -39,12 +40,4 @@ class UdpClient( override fun close() { socket.close() } - - @Suppress("MemberVisibilityCanBePrivate") - companion object { - //定义不同环境下数据报的最大大小 - const val LANNetLen = 1472 - const val internetLen = 548 - const val defaultLen = internetLen - } } diff --git a/utils/src/main/kotlin/cn/tursom/utils/TokenUtil.kt b/utils/src/main/kotlin/cn/tursom/utils/TokenUtil.kt index 535fa9d..c01aaa6 100644 --- a/utils/src/main/kotlin/cn/tursom/utils/TokenUtil.kt +++ b/utils/src/main/kotlin/cn/tursom/utils/TokenUtil.kt @@ -38,7 +38,7 @@ open class TokenUtil { if (decode.tim + decode.exp < System.currentTimeMillis()) { throw TokenTimeoutException() } - return fromJson(toJson(decode.dat), dataClazz) + return fromJson(toJson(decode.dat!!), dataClazz) } open fun encrypt(secretKey: String, encryptSource: ByteArray, type: String): String { @@ -58,7 +58,7 @@ open class TokenUtil { private inline fun fromJson(json: String): T = fromJson(json, T::class.java) - data class TokenBody(val tim: Long, val exp: Long, val dat: T) + data class TokenBody(val tim: Long = System.currentTimeMillis(), val exp: Long = 0L, val dat: T? = null) open class TokenException : Exception() class WrongTokenSyntaxException : TokenException()