Skip to content

Instantly share code, notes, and snippets.

@habibiefaried
Last active June 9, 2024 10:04
Show Gist options
  • Save habibiefaried/ec09cafa56673ada077e10c8405e3bf4 to your computer and use it in GitHub Desktop.
Save habibiefaried/ec09cafa56673ada077e10c8405e3bf4 to your computer and use it in GitHub Desktop.
TCP Client to HTTP demo
package main
import (
"bufio"
"fmt"
"net"
"log"
"bytes"
)
func SendTCPMessage(conn net.Conn, input string) error {
_, err := conn.Write([]byte(input))
if err != nil {
return err
}
return nil
}
func RecvTCPMessageTryThis1(conn net.Conn) (string, error){
reader := bufio.NewReader(conn)
part := make([]byte, 4096)
n, err := reader.Read(part)
if err != nil {
return "", err
}
return string(part[:n]), nil
}
func RecvTCPMessageTryThis2(conn net.Conn) (string, error){
var response bytes.Buffer
reader := bufio.NewReader(conn)
// Read the headers
for {
line, err := reader.ReadString('\n')
if err != nil {
return "", err
}
if line == "\r\n" {
break
}
response.WriteString(line)
}
return response.String(), nil
}
func RecvTCPMessage(conn net.Conn) (string, error){
response, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
return "", err
}
return response, nil
}
func RunTCPClient() (net.Conn, error) {
// Connect to the server
conn, err := net.Dial("tcp", "example.org:80")
if err != nil {
return conn, err
}
return conn, nil
}
func main() {
conn, err := RunTCPClient()
if err != nil {
log.Fatal(err)
}
err = SendTCPMessage(conn, "GET / HTTP/1.1\nHost:example.org\n\n")
if err != nil {
log.Fatal(err)
}
s, err := RecvTCPMessage(conn)
if err != nil {
log.Fatal(err)
}
fmt.Println(s)
conn.Close()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment