
package mainimport ( "bufio" "fmt" "net")var allClIEnts map[*ClIEnt]inttype ClIEnt struct { // incoming chan string outgoing chan string reader *bufio.Reader writer *bufio.Writer conn net.Conn connection *ClIEnt}func (clIEnt *ClIEnt) Read() { for { line,err := clIEnt.reader.ReadString('\n') if err == nil { if clIEnt.connection != nil { clIEnt.connection.outgoing <- line } fmt.Println(line) } else { break } } clIEnt.conn.Close() delete(allClIEnts,clIEnt) if clIEnt.connection != nil { clIEnt.connection.connection = nil } clIEnt = nil}func (clIEnt *ClIEnt) Write() { for data := range clIEnt.outgoing { clIEnt.writer.WriteString(data) clIEnt.writer.Flush() }}func (clIEnt *ClIEnt) Listen() { go clIEnt.Read() go clIEnt.Write()}func NewClIEnt(connection net.Conn) *ClIEnt { writer := bufio.NewWriter(connection) reader := bufio.NewReader(connection) clIEnt := &ClIEnt{ // incoming: make(chan string),outgoing: make(chan string),conn: connection,reader: reader,writer: writer,} clIEnt.Listen() return clIEnt}func main() { allClIEnts = make(map[*ClIEnt]int) Listener,_ := net.Listen("tcp",":8080") for { conn,err := Listener.Accept() if err != nil { fmt.Println(err.Error()) } clIEnt := NewClIEnt(conn) for clIEntList,_ := range allClIEnts { if clIEntList.connection == nil { clIEnt.connection = clIEntList clIEntList.connection = clIEnt fmt.Println("Connected") } } allClIEnts[clIEnt] = 1 fmt.Println(len(allClIEnts)) }}解决方法 你的代码很好.我在linux上编译,尝试了4个连接.一切都按预期工作. 总结 以上是内存溢出为你收集整理的Golang多个连接到TCP服务器全部内容,希望文章能够帮你解决Golang多个连接到TCP服务器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)