github.com/geph-official/geph2@v0.22.6-0.20210211030601-f527cb59b0df/libs/niaucchi5/urtcppf/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "io" 6 "io/ioutil" 7 "log" 8 "net" 9 10 "github.com/geph-official/geph2/libs/kcp-go" 11 "github.com/geph-official/geph2/libs/niaucchi5" 12 "github.com/google/gops/agent" 13 ) 14 15 func main() { 16 if err := agent.Listen(agent.Options{}); err != nil { 17 log.Fatal(err) 18 } 19 20 var flagClient string 21 var flagServer string 22 flag.StringVar(&flagClient, "c", "", "client connect") 23 flag.StringVar(&flagServer, "s", "", "server listen") 24 flag.Parse() 25 26 if flagClient == "" && flagServer == "" { 27 log.Fatal("must give -c or -s") 28 } 29 if flagClient != "" && flagServer != "" { 30 log.Fatal("cannot give both -c or -s") 31 } 32 if flagServer != "" { 33 mainServer(flagServer) 34 } 35 if flagClient != "" { 36 mainClient(flagClient) 37 } 38 } 39 40 func mainServer(flagServer string) { 41 listener, err := net.Listen("tcp", flagServer) 42 if err != nil { 43 panic(err) 44 } 45 for { 46 cl, err := listener.Accept() 47 if err != nil { 48 panic(err) 49 } 50 go func() { 51 defer cl.Close() 52 ur := niaucchi5.NewURTCP(cl) 53 pc := niaucchi5.ToPacketConn(ur) 54 k, err := kcp.NewConn2(niaucchi5.StandardAddr, nil, 0, 0, pc) 55 if err != nil { 56 panic(err) 57 } 58 k.SetWindowSize(10000, 10000) 59 k.SetNoDelay(0, 100, 3, 0) 60 k.SetStreamMode(true) 61 k.SetMtu(1200) 62 63 for { 64 _, err := k.Write(make([]byte, 1400)) 65 if err != nil { 66 log.Println(err) 67 return 68 } 69 } 70 }() 71 } 72 } 73 74 func mainClient(flagClient string) { 75 conn, err := net.Dial("tcp", flagClient) 76 if err != nil { 77 panic(err) 78 } 79 ur := niaucchi5.NewURTCP(conn) 80 pc := niaucchi5.ToPacketConn(ur) 81 k, err := kcp.NewConn2(niaucchi5.StandardAddr, nil, 0, 0, pc) 82 if err != nil { 83 panic(err) 84 } 85 k.SetWindowSize(10000, 10000) 86 k.SetNoDelay(0, 100, 3, 0) 87 k.SetStreamMode(true) 88 k.SetMtu(1200) 89 _, err = io.Copy(ioutil.Discard, k) 90 if err != nil { 91 panic(err) 92 } 93 }