package main
import(
"net"
"os"
"log"
)
func checkerror(err error){ //出现错误处理
if err != nil {
log.Println("出现错误:",err.Error())
os.Exit(1)
}
}
func broadmsg(msg []byte){ //消息广播
for _,connopj := range conns {
connopj.Write(msg)
}
}
func handleconn(conn net.Conn){
buffer := make([]byte,1024)
for{
n,err := conn.Read(buffer)
if err != nil {
log.Println(conn.RemoteAddr().String(),"出现错误:",err)
delete(conns,conn.RemoteAddr().String())
broadmsg([]byte(conn.RemoteAddr().String() + "已下线"))
return
}
msg := conn.RemoteAddr().String() + ":" + string(buffer[:n])
broadmsg([]byte(msg))
log.Println(conn.RemoteAddr().String(),"已成功发送一条消息",string(buffer[:n]))
}
}
var conns = make(map[string]net.Conn) //创建字典集合存储客户端连接
func main() {
ip := "172.16.0.2:9999"
listen,err := net.Listen("tcp",ip)
checkerror(err)
defer listen.Close()
log.Println("等待客户端连接")
for{
conn,err := listen.Accept()
if err != nil {
continue
}
connip := conn.RemoteAddr().String()
conns[connip] = conn
log.Println(connip,"已经建立连接")
broadmsg([]byte("欢迎" + connip + "上线"))
go handleconn(conn)
}
}
go语言的学习资料还是比较少,这里代码仅供大家参考下。(代码比较粗糙,有空的话写详细一点,这里就直接贴源码吧)
客户端是用c#写的,就不贴出来了:
运行情况: