Skip to content

Commit ff8fd07

Browse files
committed
Implement TCP client and server with error handling; add web server for HTTP requests
1 parent 50c2232 commit ff8fd07

File tree

4 files changed

+132
-0
lines changed

4 files changed

+132
-0
lines changed

tcp_server/client/client.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package main
2+
3+
import (
4+
"bufio"
5+
"fmt"
6+
"net"
7+
"os"
8+
"strings"
9+
)
10+
11+
func main() {
12+
// open connection:
13+
conn, err := net.Dial("tcp", ":8080")
14+
if err != nil {
15+
// No connection could be made because the target machine actively refused it.
16+
fmt.Println("Error dialing", err.Error())
17+
return // terminate program
18+
}
19+
inputReader := bufio.NewReader(os.Stdin)
20+
fmt.Println("First, what is your name?")
21+
clientName, _ := inputReader.ReadString('\n')
22+
// fmt.Printf("CLIENTNAME %s",clientName)
23+
trimmedClient := strings.Trim(clientName, "\r\n") // "\r\n" on Windows, "\n" on Linux
24+
// send info to server until Quit:
25+
for {
26+
fmt.Println("What to send to the server? Type Q to quit.")
27+
input, _ := inputReader.ReadString('\n')
28+
trimmedInput := strings.Trim(input, "\r\n")
29+
// fmt.Printf("input:--%s--",input)
30+
// fmt.Printf("trimmedInput:--%s--",trimmedInput)
31+
if trimmedInput == "Q" {
32+
return
33+
}
34+
_, err = conn.Write([]byte(trimmedClient + " says: " + trimmedInput + "\n"))
35+
}
36+
}

tcp_server/polling web/main.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"io"
6+
"net/http"
7+
)
8+
9+
var urls = []string{
10+
"http://www.google.com/",
11+
"http://golang.org/",
12+
"http://blog.golang.org/",
13+
}
14+
15+
func main() {
16+
// Executes an HTTP HEAD request for all URL's
17+
// and returns the HTTP status string or an error string.
18+
for _, url := range urls {
19+
resp, err := http.Head(url)
20+
if err != nil {
21+
fmt.Println("Error:", url, err)
22+
}
23+
fmt.Println(url, ": ", resp.Status)
24+
}
25+
26+
res, err := http.Get("http://www.google.com/")
27+
if err != nil {
28+
fmt.Println("Error:", err)
29+
return
30+
}
31+
data, err := io.ReadAll(res.Body)
32+
if err != nil {
33+
fmt.Println("Error reading response body:", err)
34+
return
35+
}
36+
fmt.Println("Response body:", string(data))
37+
}

tcp_server/server.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"net"
6+
)
7+
8+
func main() {
9+
fmt.Println("Starting the TCP server...")
10+
11+
listener, err := net.Listen("tcp", "0.0.0.0:8080")
12+
if err != nil {
13+
fmt.Println("Error starting the server:", err)
14+
return
15+
}
16+
defer listener.Close()
17+
18+
for {
19+
conn, err := listener.Accept()
20+
if err != nil {
21+
fmt.Println("Error accepting connection:", err)
22+
continue
23+
}
24+
25+
go doServerStuff(conn)
26+
}
27+
}
28+
29+
func doServerStuff(conn net.Conn) {
30+
for {
31+
buf := make([]byte, 512)
32+
_, err := conn.Read(buf)
33+
if err != nil {
34+
fmt.Println("Error reading", err.Error())
35+
return // terminate program
36+
}
37+
fmt.Printf("Received data: %v", string(buf))
38+
}
39+
}

tcp_server/web_server/main.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"net/http"
7+
)
8+
9+
func HelloServer(w http.ResponseWriter, req *http.Request) {
10+
fmt.Println("Inside HelloServer handler")
11+
fmt.Fprint(w, "Hello, "+req.URL.Path[1:])
12+
}
13+
14+
func main() {
15+
http.HandleFunc("/", HelloServer)
16+
err := http.ListenAndServe("0.00.0:3000", nil)
17+
if err != nil {
18+
log.Fatal("ListenAndServe: ", err.Error())
19+
}
20+
}

0 commit comments

Comments
 (0)