Pocket
LINEで送る

P2P通信をつくりたいので、ソケット通信やってみます。超わかりやすいサイトを発見しました。
現在日時を返すサーバと、それを取得・表示するクライアントです。ほぼ上記のサイトの最初のコードですが、上記のサイトのクライアントだと、サーバから返ってくる日付が表示されなかったのでちょっと修正しました。

勉強中のGithub(Server, Client)

Server

package main

import (
    "fmt"
    "net"
    "os"
    "time"
)

func main() {
    service := ":7777"
    tcpAddr, err := net.ResolveTCPAddr("tcp4", service)
    chkErr(err, "ResolveTCPAddr")

    listener, err := net.ListenTCP("tcp", tcpAddr)
    chkErr(err, "ListenTCP")

    for {
        conn, err := listener.Accept()
        if err != nil {
            continue
        }

        daytime := time.Now().String()
        _, err = conn.Write([]byte(daytime))
        chkErr(err, "Write")

        _ = conn.Close()
    }

}

func chkErr(err error, place string) {
    if err != nil {
        fmt.Printf("(%s)", place)
        fmt.Fprintf(os.Stderr, "%s", err.Error())
        os.Exit(0)
    }
}

Client

package main

import (
    "fmt"
    "net"
    "os"
)

func main() {
    host := "127.0.0.1:7777"

    tcpAddr, err := net.ResolveTCPAddr("tcp4", host)
    chkErr(err, "tcpAddr")

    conn, err := net.DialTCP("tcp", nil, tcpAddr)
    chkErr(err, "DialTCP")

    buf := make([]byte, 1024)
    n, err := conn.Read(buf)
    chkErr(err, "Read")
    fmt.Println(string(buf[:n]))
}

func chkErr(err error, place string) {
    if err != nil {
        fmt.Printf("(%s)", place)
        fmt.Fprintf(os.Stderr, "%s", err.Error())
        os.Exit(0)
    }
}

あと、下記に、チャットのサンプルプログラムがあるのであとで見てみる。
tinode/chat
mshahriarinia/Golang

Pocket
LINEで送る

カテゴリー: プログラミング

コメントください

関連記事

プログラミング

Go言語によるビットコインのフルノード実装btcdを調べる(2)

btcdを実行した際のプログラムの流れを最初から確認してみます。 se 続きを読む …

プログラミング

Go – leveldb

Goで使えるLevelDB。 syndtr/goleveldb ドキュ 続きを読む …

%d人のブロガーが「いいね」をつけました。