02 exercises client server
https://github.com/andcloudio/go-concurrency-exercises/tree/master/01-exercise-solution
client.go
package main
import (
"io"
"log"
"net"
"os"
)
func main() {
// connect to server on localhost port 8000
conn, err := net.Dial("tcp", "localhost:8000")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
// 將 server 傳來的 複製到 os.Stdout 來顯示出來
mustCopy(os.Stdout, conn)
}
// mustCopy - utility function
func mustCopy(dst io.Writer, src io.Reader) {
if _, err := io.Copy(dst, src); err != nil {
log.Fatal(err)
}
}
server.go
package main
import (
"io"
"log"
"net"
"time"
)
func main() {
// write server program to handle concurrent client connections.
listener, err := net.Listen("tcp", "localhost:8000")
if err != nil {
log.Fatal(err)
}
for {
conn, err := listener.Accept()
if err != nil {
continue
}
go handleConn(conn)
}
}
// handleConn - utility function
func handleConn(c net.Conn) {
defer c.Close()
for {
_, err := io.WriteString(c, "response from server\n")
if err != nil {
return
}
time.Sleep(time.Second)
}
}