Caffè Latte

日々を徒然に

スポンサーリンク

GolangでEchoサーバーを作った

スポンサーリンク

Echoサーバーとは

きたレスポンスをそのまま返すサーバー

サーバー実装

package main

import (
    "io"
    "net"
    "log"
)

func main() {
    url := "localhost"
    port := "8888"

    listener, err := net.Listen("tcp", url + ":" + port )
    if err != nil {
        panic(err)
    }
    log.Println("Server start at ",  url + ":" + port )
    for {
        conn, err := listener.Accept()
        if err != nil {
            panic(err)
        }
        go func() {
            defer conn.Close()
            echo(conn)
        }()
    }
}

func echo(conn net.Conn) {
    messageBuf := make([]byte, 256)
    for {
        messageLength, err := conn.Read(messageBuf)
        if err != nil {
            if err == io.EOF {
                break
            }
            panic(err)
        }
        if messageLength == 0 {
            break
        }
        log.Println("Requeset ", string(messageBuf))
        _, err = conn.Write(messageBuf)
        if err != nil {
            panic(err)
        }
        log.Println("Responce ", string(messageBuf))
    }
}

クライアント実装

package main

import (
    "net"
    "os"
    "bufio"
    "log"
)

func main(){
    url := "localhost"
    port := "8888"
    conn, err := net.Dial("tcp", url + ":" + port)
    if err != nil{
        panic(err)
    }
    defer conn.Close()

    log.Println("Connected to server")
    stream := bufio.NewScanner(os.Stdin)
    for stream.Scan() {
        if stream.Err() != nil {
            log.Println(stream.Err())
            break
        }
        text := stream.Text()
        _, err := conn.Write([]byte(text))
        if err != nil {
            panic(err)
        }
        messageBuf := make([]byte, 256)
        n, err := conn.Read(messageBuf)
        if err != nil{
            panic(err)
        }
        log.Println("Server : ", string(messageBuf[:n]))
    }
}

使い方

Run Server

command

go run server/main.go

Run Client

command

go run client/main.go

リポジトリ

github.com

作った感想

某所でEchoサーバーくらい書いたことあるよねと言われたから作ってみた

Golangの仕様を追えてないので、クライアント作る方が大変だった

スポンサーリンク