Selaa lähdekoodia

basic tcp server

Douglas Andreani 5 vuotta sitten
vanhempi
commit
db81d98813
1 muutettua tiedostoa jossa 52 lisäystä ja 11 poistoa
  1. 52 11
      main.go

+ 52 - 11
main.go

@@ -1,26 +1,53 @@
 package main
 
 import (
+	"bufio"
 	"fmt"
 	"io/ioutil"
 	"net"
 	"os"
 	"strconv"
+	"strings"
 )
 
-func main() {
-	if len(os.Args) != 3 {
-		fmt.Println("usage: %s ip-address\n", os.Args[0])
-		os.Exit(1)
+// TCP4Server will open listeners and create Go Handlers
+func TCP4Server(port int) {
+	service := "127.0.0.1:" + strconv.Itoa(port)
+	fmt.Printf("Trying to server on %s\n\n", service)
+
+	listener, err := net.Listen("tcp4", service)
+	checkError(err)
+	defer listener.Close()
+	for {
+		c, err := listener.Accept()
+		checkError(err)
+		go ServerHandler(c)
+	}
+
+}
+
+// ServerHandler will receive data from the socket and answer to it
+func ServerHandler(c net.Conn) {
+
+	for {
+
+		r := bufio.NewReader(c)
+		aux, err := r.ReadString('\n')
+		checkError(err)
+		result := strings.TrimSpace(aux)
+		fmt.Println(string(result))
+
+		answer := OpenRequestIPV4(result, 80)
+
+		c.Write([]byte(answer))
 	}
 
-	port, _ := strconv.Atoi(os.Args[2])
-	OpenRequestIPV4(os.Args[1], port)
+	c.Close()
 
 }
 
 // OpenRequestIPV4 Opens a request to an ipv4 tcp network address
-func OpenRequestIPV4(ipv4Address string, port int) {
+func OpenRequestIPV4(ipv4Address string, port int) string {
 
 	service := ipv4Address + ":" + strconv.Itoa(port)
 	tcpv4Addr, _ := net.ResolveTCPAddr("tcp", service)
@@ -29,12 +56,26 @@ func OpenRequestIPV4(ipv4Address string, port int) {
 
 	result, _ := ioutil.ReadAll(conn)
 
-	fmt.Println(string(result))
-
-	os.Exit(0)
+	return string(result)
 
 }
 
 func checkError(err error) {
-	fmt.Println(err.Error())
+	if err != nil {
+		fmt.Println(err.Error())
+		os.Exit(1)
+	}
+}
+
+func main() {
+	/*if len(os.Args) != 3 {
+		fmt.Println("usage: %s ip-address\n", os.Args[0])
+		os.Exit(1)
+	}*/
+
+	//port, _ := strconv.Atoi(os.Args[2])
+	//OpenRequestIPV4(os.Args[1], port)
+
+	TCP4Server(15232)
+
 }