Skip to content

Instantly share code, notes, and snippets.

@habibiefaried
Last active June 9, 2024 10:04
Show Gist options
  • Select an option

  • Save habibiefaried/ec09cafa56673ada077e10c8405e3bf4 to your computer and use it in GitHub Desktop.

Select an option

Save habibiefaried/ec09cafa56673ada077e10c8405e3bf4 to your computer and use it in GitHub Desktop.

Revisions

  1. habibiefaried revised this gist Jun 9, 2024. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion tcp-client-to-http.go
    Original file line number Diff line number Diff line change
    @@ -75,7 +75,7 @@ func main() {
    log.Fatal(err)
    }

    s, err := RecvTCPMessageTryThis2(conn)
    s, err := RecvTCPMessage(conn)
    if err != nil {
    log.Fatal(err)
    }
  2. habibiefaried created this gist Jun 9, 2024.
    84 changes: 84 additions & 0 deletions tcp-client-to-http.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,84 @@
    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 := RecvTCPMessageTryThis2(conn)
    if err != nil {
    log.Fatal(err)
    }
    fmt.Println(s)
    conn.Close()
    }