Skip to content

Instantly share code, notes, and snippets.

@supercocoa
Forked from kenshinx/client.go
Created December 14, 2021 07:34
Show Gist options
  • Save supercocoa/37e95eda9e4105f368a96460ed0f4d2e to your computer and use it in GitHub Desktop.
Save supercocoa/37e95eda9e4105f368a96460ed0f4d2e to your computer and use it in GitHub Desktop.

Revisions

  1. @kenshinx kenshinx revised this gist Aug 29, 2019. 2 changed files with 9 additions and 4 deletions.
    8 changes: 5 additions & 3 deletions client.go
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,8 @@
    package main

    import (
    "log"
    "os"
    "log"
    "net"
    "strconv"
    "strings"
    @@ -16,11 +17,12 @@ 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)
    os.Exit(1)
    }

    defer conn.Close()

    conn.Write([]byte(message))
    conn.Write([]byte(StopCharacter))
    5 changes: 4 additions & 1 deletion server.go
    Original file line number Diff line number Diff line change
    @@ -18,11 +18,14 @@ const (
    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)
    }

    defer listen.Close()

    log.Printf("Begin listen port: %d", port)

    for {
  2. @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)

    }