Android 简单UDP通信框架(Kotlin)

使用说明

UDPManager是一个静态工具类。复制粘贴进去就可以使用。

使用前初始化:
1.通过UDPManager.init(port:Int)进行初始化。(默认本地端口为12306,可通过port参数修改)
2.通过UDPManager.setIPandPort(dstIP:String,dstPort:Int)设置目的IP和目的端口号。

使用时:
1.作为客户端:
使用sendMsg()进行发送,使用recvReplyMsg()接收对方的回复,ReplyBuf为收到的内容。
2.作为服务端:
使用recvMsg()接收对方的回复,使用sendReplyMsg()进行回复,RecvBuf为收到的内容。
可以通过getHisIP()获取客户的IP。

使用技巧:
可以直接本地做回环测试,完整的一个流程如下:
 1.作为客户端 sendMsg()
 2.作为服务器 recvMsg() 
 3.作为服务器 sendReplyMsg() 
 4.作为客户端 recvReplyMsg()
//作者:LC
//时间:2020/2/12/15:15
package com.example.minitankwar

import java.net.DatagramPacket
import java.net.DatagramSocket
import java.net.InetAddress

object UDPManager{
    private lateinit var listenSocket:DatagramSocket

    lateinit var listenPacket : DatagramPacket  //等待监听的包
    private lateinit var sendPacket : DatagramPacket    //发往目的地的包
    val RecvBuf = ByteArray(1024)
    val ReplyBuf = ByteArray(1024)
    private var dstIP = "127.0.0.1" //默认目的IP
    private var dstPort = 12306     //默认目的端口

    fun init(){
        listenSocket  = DatagramSocket(12306)//监听用的socket
    }

    fun init(port:Int)
    {
        listenSocket  = DatagramSocket(port)//监听用的socket
    }

    fun setIPandPort(dstIP:String,dstPort:Int)
    {
        this.dstIP =dstIP
        this.dstPort = dstPort
    }

    fun close(){
        listenSocket.close()
        listenSocket.close()
    }

    //使用12307端口向目标设置并发送信息
    fun sendMsg(str:String){
        val bytes = str.toByteArray()
        sendPacket = DatagramPacket(bytes,bytes.size, InetAddress.getByName(dstIP), dstPort)
        listenSocket.send(sendPacket)
    }
    fun sendMsg(bytes: ByteArray){
        sendPacket = DatagramPacket(bytes,bytes.size, InetAddress.getByName(dstIP), dstPort)
        listenSocket.send(sendPacket)
    }

    //使用12306端口回复目标信息(前提是接收过信息)
    fun sendReplyMsg(str:String){
        val bytes = str.toByteArray()
        listenPacket = DatagramPacket(bytes,bytes.size, listenPacket.address, listenPacket.port)
        listenSocket.send(listenPacket)
    }
    fun sendReplyMsg(bytes: ByteArray){
        listenPacket = DatagramPacket(bytes,bytes.size, listenPacket.address, listenPacket.port)
        listenSocket.send(listenPacket)
    }

    //来自服务器回复的信息接收
    fun recvReplyMsg()
    {
        recv(listenSocket,ReplyBuf)
    }

    //来自客户端的信息
    fun recvMsg()
    {
        listenPacket=recv(listenSocket,RecvBuf)
    }

    //获得对方的IP
    fun getHisIP():InetAddress{
        return listenPacket.address
    }
    
    private fun recv(socket: DatagramSocket, receiveBuf: ByteArray): DatagramPacket {
        val receiverPacket = DatagramPacket(receiveBuf, receiveBuf.size)
        socket.receive(receiverPacket)
        return receiverPacket
    }
}
发布了10 篇原创文章 · 获赞 4 · 访问量 1779

猜你喜欢

转载自blog.csdn.net/qq_34522183/article/details/104279311
今日推荐