package main import ( "crypto/tls" "encoding/binary" "flag" "log" "net" "os" ) var ( addr = flag.String("addr", "nhaminated.com:8000", "server to connect to") useTLS = flag.Bool("useTLS", false, "connect using TLS") ) func main() { flag.Parse() logger := log.New(os.Stderr, "", log.Ldate|log.Ltime|log.Lmicroseconds) var conn net.Conn var err error if *useTLS { conn, err = tls.Dial("tcp", *addr, &tls.Config{ InsecureSkipVerify: true, // So I can decrypt the traffic in Wireshark CipherSuites: []uint16{tls.TLS_RSA_WITH_RC4_128_SHA}, }) } else { conn, err = net.Dial("tcp", *addr) } if err != nil { logger.Fatalln("dial error: ", err.Error()) } defer conn.Close() readDone := make(chan interface{}) go func() { var value uint32 if err := binary.Read(conn, binary.LittleEndian, &value); err != nil { logger.Println("read error: ", err.Error()) } else { logger.Println("read value: ", value) } conn.Close() readDone <- nil return }() var i uint32 for i = 0; ; i++ { if err := binary.Write(conn, binary.LittleEndian, &i); err != nil { logger.Println("write error on iteration ", i, ": ", err.Error()) break } } <-readDone }