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  }