diff --git a/daytime.go b/daytime.go new file mode 100644 index 0000000..fa15e1f --- /dev/null +++ b/daytime.go @@ -0,0 +1,35 @@ +package main + +import ( + "fmt" + "net" + "os" + "time" +) + +func main() { + service := ":1200" + tcpAddr, err := net.ResolveTCPAddr("tcp4", service) + checkError(err) + + listener, err := net.ListenTCP("tcp", tcpAddr) + checkError(err) + + for { + conn, err := listener.Accept() + if err != nil { + continue + } + + daytime := "Hahahaha virgin client vs chad server" + time.Now().String() + conn.Write([]byte(daytime)) + conn.Close() + } +} + +func checkError(err error) { + if err != nil { + fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) + os.Exit(1) + } +} diff --git a/echo.go b/echo.go new file mode 100644 index 0000000..acdb5d3 --- /dev/null +++ b/echo.go @@ -0,0 +1,53 @@ +package main + +import ( + "net" + "os" + "fmt" +) + +func main() { + service := ":1201" + tcpAddr, err := net.ResolveTCPAddr("tcp4", service) + checkError(err) + + listener, err := net.ListenTCP("tcp", tcpAddr) + checkError(err) + + for { + conn, err := listener.Accept() + if err != nil { + continue + } + + go handleClient(conn) + } +} + +func handleClient(conn net.Conn) { + // close connection on exit + defer conn.Close() + + var buf [512]byte + + for { + // read up to 512 bytes + n, err := conn.Read(buf[0:]) + if err != nil { + return + } + + // write the n bytes read + _, err2 := conn.Write(buf[0:n]) + if err2 != nil { + return + } + } +} + +func checkError(err error) { + if err != nil { + fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) + os.Exit(1) + } +} diff --git a/ip.go b/ip.go new file mode 100644 index 0000000..f7516bc --- /dev/null +++ b/ip.go @@ -0,0 +1,26 @@ +/* IP + */ + +package main + +import ( + "net" + "os" + "fmt" +) + +func main() { + if len(os.Args) != 2 { + fmt.Fprintf(os.Stderr, "Usage: %s ip-addr\n", os.Args[0]) + os.Exit(1) + } + name := os.Args[1] + + addr := net.ParseIP(name) + if addr == nil { + fmt.Println("Invalid address") + } else { + fmt.Println("The address is ", addr.String()) + } + os.Exit(0) +} diff --git a/p2p b/p2p new file mode 100755 index 0000000..844eca2 Binary files /dev/null and b/p2p differ diff --git a/p2p.go b/p2p.go new file mode 100644 index 0000000..5a6a592 --- /dev/null +++ b/p2p.go @@ -0,0 +1,91 @@ +package main + +import ( + "net" + "os" + "fmt" + "strings" +) + +func main() { + if len(os.Args) <= 1 { + fmt.Fprintf(os.Stderr, "Usage: %s \n", os.Args[0]) + os.Exit(1) + } + + // Configure this local node's listening port. + service := ":" + os.Args[1] + tcpAddr, err := net.ResolveTCPAddr("tcp4", service) + checkError(err) + + listener, err := net.ListenTCP("tcp", tcpAddr) + checkError(err) + + // If a remote peer's port is specified, we want to connect and message it + if len(os.Args) == 3 { + fmt.Println("Found a remote peer") + remote := ":" + os.Args[2] + tcpRemote, err := net.ResolveTCPAddr("tcp4", remote) + checkError(err) + + peerconn, err := net.DialTCP("tcp4", nil, tcpRemote) + checkError(err) + + _, err = peerconn.Write([]byte("Hello from " + os.Args[1])) + checkError(err) + + var buf [512]byte + + n, err := peerconn.Read(buf[0:]) + checkError(err) + + result := string(buf[0:n]) + fmt.Println(string(result)) + } + + fmt.Printf("(%s) Waiting for peer connections...\n", os.Args[1]) + for { + conn, err := listener.Accept() + if err != nil { + continue + } + + handleConnection(conn) + } +} + +func handleConnection(conn net.Conn) { + // close connection on exit + defer conn.Close() + + var buf [512]byte + + for { + // read up to 512 bytes + n, err := conn.Read(buf[0:]) + if err != nil { + return + } + + message := string(buf[0:n]) + fmt.Println(message) + + tokens := strings.Split(message, " ") + if tokens[0] != "" { + response := "Hi " + tokens[2] + ", from " + os.Args[1] + // write the n bytes read + _, err2 := conn.Write([]byte(response)) + if err2 != nil { + return + } + } + + } +} + +func checkError(err error) { + if err != nil { + fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) + os.Exit(1) + } +}