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
    }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值