Advertisement
Guest User

Untitled

a guest
Jul 18th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 0.87 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "crypto/rand"
  5.     "io"
  6.     "log"
  7.     "net"
  8.     "sync/atomic"
  9.     "time"
  10. )
  11.  
  12. var bytesSent uint64
  13.  
  14. func measure(start time.Time) {
  15.     for {
  16.         time.Sleep(5 * time.Second)
  17.         log.Println(float64(atomic.LoadUint64(&bytesSent)) / time.Since(start).Seconds())
  18.     }
  19. }
  20.  
  21. func main() {
  22.     log.SetFlags(log.LstdFlags | log.Lshortfile)
  23.  
  24.     conn, err := net.Dial("tcp", "nuc:50001")
  25.     if err != nil {
  26.         log.Fatal(err)
  27.     }
  28.  
  29.     go measure(time.Now())
  30.  
  31.     for {
  32.         data := make([]byte, 32*1024)
  33.         if _, err := rand.Read(data); err != nil {
  34.             log.Fatal(err)
  35.         } else if _, err := conn.Write(data); err != nil {
  36.             log.Fatal(err)
  37.         }
  38.  
  39.         resp := make([]byte, 1)
  40.         if _, err := io.ReadFull(conn, resp); err != nil {
  41.             log.Fatal(err)
  42.         } else if resp[0] != 0x01 {
  43.             log.Fatalf("unexepected return: %v", resp)
  44.         }
  45.         atomic.AddUint64(&bytesSent, uint64(len(data)))
  46.     }
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement