写了一个Golang TCP服务器,有两个不同的客户端链接这个服务器,这两个客户端之间需要互相发送/接收数据。
这里的处理逻辑非常的简单,先是服务器监听客户端请求。然后把第一个连接过来的客户端请求链接保存在一个变量中。
第二个客户端请求过来的时候,给服务器端发送过来一条消息,然后服务器把这条消息通过刚才保存的第一个链接发送给第一个客户端。
问题来了:
在write2Client(。。)函数中,我必须把第一个链接Close,第一个客户端才能够接收到转发过来的这条消息;如果不调用Close,则第一个无法接收到转发过来的数据。
这种处理显然是不正确的,没法发送第二条数据了。代码如下,请大家帮忙诊断一下。
func createTCPServer() {
l, err := net.Listen("tcp", ":2000")
if err != nil {
log.Fatal(err)
}
var connFist net.Conn
defer l.Close()
for {
// Wait for a connection.
conn, err := l.Accept()
if err != nil {
log.Fatal(err)
}
// go func(c net.Conn) {
if nil == connFist {
connFist = conn
} else {
buf := make([]byte, 1024)
uplen, err := conn.Read(buf)
if err != nil {
return
}
go write2Client(connFist, buf[:uplen])
// connFist.Close()
connFist = nil
conn.Close()
}
}
}
func write2Client(co net.Conn, bb []byte) {
// wlen, err := co.Write(bb)
co.Write(bb)
co.Close()
co = nil
}