snippets

More or less useful code snippets
Log | Files | Refs

tcplog.go (1073B)


      1 package main
      2 
      3 import (
      4 	"fmt"
      5 	"net"
      6 	"os"
      7 	"time"
      8 )
      9 
     10 const readBufferSize = 256
     11 const help = `%v starts TCP server on port defined by env var TCPLOG_PORT
     12 (or default port 12893) and logs data written to it.
     13 `
     14 
     15 func main() {
     16 	if len(os.Args) > 1 {
     17 		fmt.Printf(help, os.Args[0])
     18 		os.Exit(0)
     19 	}
     20 	port := os.Getenv("TCPLOG_PORT")
     21 	if port != "" {
     22 		port = ":" + port
     23 	} else {
     24 		port = ":12893"
     25 	}
     26 	ln, err := net.Listen("tcp", port)
     27 	if err != nil {
     28 		panic(err)
     29 	}
     30 	for {
     31 		conn, err := ln.Accept()
     32 		if err != nil {
     33 			fmt.Println("Connection failed:", err)
     34 		}
     35 		buffer := make([]byte, readBufferSize)
     36 		var data []byte
     37 		i := readBufferSize
     38 		for i == readBufferSize {
     39 			i, err = conn.Read(buffer)
     40 			if err != nil {
     41 				fmt.Println("Data read failed:", err)
     42 			}
     43 			data = append(data, buffer[:i]...)
     44 		}
     45 		fmt.Println(time.Now())
     46 		fmt.Println("--- BYTES ---")
     47 		fmt.Println(data)
     48 		fmt.Println("-------------")
     49 		fmt.Println()
     50 		fmt.Println("--- TEXT ----")
     51 		fmt.Println(string(data))
     52 		fmt.Println("-------------")
     53 		conn.Write([]byte("OKI"))
     54 		conn.Close()
     55 	}
     56 }