Skip to content

Instantly share code, notes, and snippets.

@ugurozgen
Forked from kenshinx/client.go
Created January 8, 2018 15:40
Show Gist options
  • Save ugurozgen/060ad719c5b48b7bf1bda2cbbc5db299 to your computer and use it in GitHub Desktop.
Save ugurozgen/060ad719c5b48b7bf1bda2cbbc5db299 to your computer and use it in GitHub Desktop.

Revisions

  1. @kenshinx kenshinx created this gist Jun 17, 2013.
    44 changes: 44 additions & 0 deletions client.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,44 @@
    package main

    import (
    "log"
    "net"
    "strconv"
    "strings"
    )

    const (
    message = "Ping"
    StopCharacter = "\r\n\r\n"
    )

    func SocketClient(ip string, port int) {
    addr := strings.Join([]string{ip, strconv.Itoa(port)}, ":")
    conn, err := net.Dial("tcp", addr)

    defer conn.Close()

    if err != nil {
    log.Fatalln(err)
    }

    conn.Write([]byte(message))
    conn.Write([]byte(StopCharacter))
    log.Printf("Send: %s", message)

    buff := make([]byte, 1024)
    n, _ := conn.Read(buff)
    log.Printf("Receive: %s", buff[:n])

    }

    func main() {

    var (
    ip = "127.0.0.1"
    port = 3333
    )

    SocketClient(ip, port)

    }
    86 changes: 86 additions & 0 deletions server.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,86 @@
    package main

    import (
    "bufio"
    "io"
    "log"
    "net"
    "os"
    "strconv"
    "strings"
    )

    const (
    Message = "Pong"
    StopCharacter = "\r\n\r\n"
    )

    func SocketServer(port int) {

    listen, err := net.Listen("tcp4", ":"+strconv.Itoa(port))
    defer listen.Close()
    if err != nil {
    log.Fatalf("Socket listen port %d failed,%s", port, err)
    os.Exit(1)
    }
    log.Printf("Begin listen port: %d", port)

    for {
    conn, err := listen.Accept()
    if err != nil {
    log.Fatalln(err)
    continue
    }
    go handler(conn)
    }

    }

    func handler(conn net.Conn) {

    defer conn.Close()

    var (
    buf = make([]byte, 1024)
    r = bufio.NewReader(conn)
    w = bufio.NewWriter(conn)
    )

    ILOOP:
    for {
    n, err := r.Read(buf)
    data := string(buf[:n])

    switch err {
    case io.EOF:
    break ILOOP
    case nil:
    log.Println("Receive:", data)
    if isTransportOver(data) {
    break ILOOP
    }

    default:
    log.Fatalf("Receive data failed:%s", err)
    return
    }

    }
    w.Write([]byte(Message))
    w.Flush()
    log.Printf("Send: %s", Message)

    }

    func isTransportOver(data string) (over bool) {
    over = strings.HasSuffix(data, "\r\n\r\n")
    return
    }

    func main() {

    port := 3333

    SocketServer(port)

    }