用go tcp实现简单的在线群聊功能

本文介绍了如何使用Go语言的TCP/IP库创建一个简单的在线群聊服务。通过运行服务端并启动多个客户端,实现了多用户之间的实时聊天功能。
摘要由CSDN通过智能技术生成

服务端代码:

package main

import (
	"fmt"
	"log"
	"net"
	"sync"
	"time"
)

var (
	 conns = make(map[string]net.Conn)//保存客户端连接
	 msgChan = make(chan string,100)//消息通道
	 lock sync.Mutex
)



func main() {
	l, err := net.Listen("tcp",":9999")//创建tcp socket并监听
	if err != nil {
		log.Println("listen error:",err)
		return
	}
	defer l.Close()
	log.Println("server listen at:9999")
	go listenMsgChan()
	for  {
		conn, err := l.Accept()//接收客户端连接(阻塞)
		if err != nil {
			log.Println("Accept error:",err)
			break
		}
		go handleConn(conn)//创建协程处理连接
	}

}


//监听消息通道,发送给所有客户端
func listenMsgChan()  {
	for  {
		select {
			case msg := <-msgChan:
				// 把所有接收到的消息广播给所有客户端
				// 发送消息通道
				lock.Lock()
				for _,conn := range conns {
					conn.Write([]byte(fmt.Sprintf("[%s]%s",ftime(),msg)))
				}
				lock.Unlock()
		}
	}
}

//处理客户端的连接
f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值