安装 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 {}
}