先看下效果:
同时创建了三个socket Client?
分别给服务器发送 1111? 2222? 3333
一起来看下:
具体server 端实现
package main
import (
"fmt"
"net"
)
//现存链接数组对象
var tcpClientList=make([] net.Conn,0);
func DoHandler(conn net.Conn) {
defer conn.Close()
//读取数据
fmt.Println("开始读取数据")
b := make([]byte, 1024)
for {
n, err := conn.Read(b)
if err != nil {
fmt.Println(err.Error());
index :=-1; //初始化一个非0的数值
for key, value := range tcpClientList {
fmt.Printf("key:%d value:%d\n", key, value);
if(value==conn){
index=key;
}
}
if(index!=-1) {
tcpClientList = append(tcpClientList[:index], tcpClientList[index+1:]...)
}
return
}
fmt.Println(conn.RemoteAddr().String() + ": 读到的数据为" + string(b[:n]))
//回复
conn.Write([]byte("OK,收到!"));
fmt.Println("客户端当前连接数为:",len(tcpClientList))
}
}
//func SendMsgToClient(clientIp string){
// for i:=0;i<len(tcpClientList);i++{
// var elme=tcpClientList[i];
// fmt.Println(elme);
// }
//}
func main() {
listen, err := net.Listen("tcp", ":8181")
if err != nil {
fmt.Println(err.Error())
return
}
defer listen.Close()
fmt.Println("开启监听等待客户端连接!");
//循环
for {
//阻塞等待客户端连接
conn, err := listen.Accept()
if err != nil {
fmt.Println(err.Error())
return
}
//创建协程处理逻辑
go DoHandler(conn);
tcpClientList=append(tcpClientList, conn);
}
}
?
|