Golang使用kcp

安装 go get -u github.com/xtaci/kcp-go

import (
    "fmt"
    "github.com/xtaci/kcp-go"
    "golang.org/x/net/ipv4"
    "golang.org/x/net/ipv6"
    "net"
)
// KCP 服务器
func server() {
    // 创建一个 UDP 连接
    udpConn, err := net.ListenUDP("udp", &net.UDPAddr{Port: 12345})
    if err != nil {
        fmt.Println("创建UDP连接失败:", err)
        return
    }

    // 创建 KCP 对象
    kcpConn, err := kcp.ServeConn(nil, 0, 0, udpConn)
    if err != nil {
        fmt.Println("创建KCP连接失败:", err)
        return
    }

    // 设置 KCP 参数
    kcpConn.SetWindowSize(4096, 4096)
    kcpConn.SetNoDelay(1, 10, 2, 1)
    kcpConn.SetStreamMode(true)

    // 进行数据传输
    data := []byte("Hello, KCP!")
    _, err = kcpConn.Write(data)
    if err != nil {
        fmt.Println("数据传输失败:", err)
        return
    }

    // 关闭连接
    kcpConn.Close()
}

// KCP 客户端
func client() {
    // 创建一个 UDP 连接
    udpConn, err := net.DialUDP("udp", nil, &net.UDPAddr{IP: net.ParseIP("127.0.0.1"), Port: 12345})
    if err != nil {
        fmt.Println("创建UDP连接失败:", err)
        return
    }

    // 创建 KCP 对象
    kcpConn, err := kcp.Dial(udpConn.RemoteAddr().String())
    if err != nil {
        fmt.Println("创建KCP连接失败:", err)
        return
    }

    // 设置 KCP 参数
    kcpConn.SetWindowSize(4096, 4096)
    kcpConn.SetNoDelay(1, 10, 2, 1)
    kcpConn.SetStreamMode(true)

    // 接收数据
    buffer := make([]byte, 1024)
    n, err := kcpConn.Read(buffer)
    if err != nil {
        fmt.Println("接收数据失败:", err)
        return
    }

    fmt.Println("接收到的数据:", string(buffer[:n]))

    // 关闭连接
    kcpConn.Close()
}

func main() {
    go server() // 启动 KCP 服务器
    go client() // 启动 KCP 客户端

    // 等待程序退出
    select {}
}
posted @   朝阳1  阅读(491)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示