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