Server端
package main
import (
"net"
"os"
"fmt"
)
func SHandlerError(err error, when string) {
if err!=nil{
fmt.Println(when,err)
os.Exit(1)
}
}
//io with the conn,with specific client
func ioWithConn(conn net.Conn) {
buffer := make([]byte, 1024)
for {
n, err := conn.Read(buffer)
SHandlerError(err,"conn.Read(buffer)")
clientMsg := string(buffer[:n])
fmt.Printf("received cleint:%v msg:%s\n",conn.RemoteAddr(),clientMsg)
if clientMsg=="im off" {
conn.Write([]byte("bye!"))
break
}
conn.Write([]byte("msg received"+clientMsg))
}
fmt.Println("client disconnected!")
}
func main() {
listener, e := net.Listen("tcp", "127.0.0.1:8888")
SHandlerError(e,"net.Listen")
fmt.Println("listening...")
for {
//conn with specific client
conn, e := listener.Accept()
SHandlerError(e,"listener.Accept")
//io with the conn,with specific client
go ioWithConn(conn)
}
}
Client端
package main
import (
"net"
"fmt"
"os"
"bufio"
)
func CHandlerError(err error, when string) {
if err!=nil{
fmt.Println(when,err)
os.Exit(1)
}
}
func main() {
conn, e := net.Dial("tcp", "127.0.0.1:8888")
CHandlerError(e,"net.Dial")
reader := bufio.NewReader(os.Stdin)
buffer := make([]byte, 1024)
for {
//block! wait for user input...
lineBytes, _, _ := reader.ReadLine()
//io with conn
conn.Write(lineBytes)
n, _ := conn.Read(buffer)
serverMsg := string(buffer[:n])
fmt.Println("server:",serverMsg)
if serverMsg=="bye!"{
break
}
}
fmt.Println("game over!")
}