go语言实现聊天服务器(多人聊天)

用go语言实现一个server作中转群发消息,多个客户端聊天

1)服务器开启,等待来自客户端的连接,把每一个客户端存储在map中

2)客户端连接服务器,给自己取一个别名,存储在服务器

3)服务器群发消息,通知在线的客户端有新的加入

4)客户端发消息,服务器解析协议,群发给每一个客户端

5)客户端下线

server

// server project main.go
package mainimport ("fmt""net""strings"
)var ConnMap map[string]net.Conn = make(map[string]net.Conn)//ConnMap := make(map[string]net.Conn)func main() {listen_socket, err := net.Listen("tcp", "127.0.0.1:8000")if err != nil {fmt.Println("server start error")}defer listen_socket.Close()fmt.Println("server is wating ....")for {conn, err := listen_socket.Accept()if err != nil {fmt.Println("conn fail ...")}fmt.Println(conn.RemoteAddr(), "connect successed")go handle(conn)}
}func handle(conn net.Conn) {for {data := make([]byte, 255)msg_read, err := conn.Read(data)if msg_read == 0 || err != nil {continue}//解析协议msg_str := strings.Split(string(data[0:msg_read]), "|")switch msg_str[0] {case "nick":fmt.Println(conn.RemoteAddr(), "-->", msg_str[1])for k, v := range ConnMap {if k != msg_str[1] {v.Write([]byte("[" + msg_str[1] + "]: join..."))}}ConnMap[msg_str[1]] = conncase "say":for k, v := range ConnMap {if k != msg_str[1] {fmt.Println("Send "+msg_str[2]+" to ", k)v.Write([]byte("[" + msg_str[1] + "]: " + msg_str[2]))}}case "quit":for k, v := range ConnMap {if k != msg_str[1] {v.Write([]byte("[" + msg_str[1] + "]: quit"))}}delete(ConnMap, msg_str[1])}}}

client

// client project main.go
package mainimport ("fmt""net"
)var nick string = ""func main() {conn, err := net.Dial("tcp", "127.0.0.1:8000")if err != nil {fmt.Println("conn fail...")}defer conn.Close()fmt.Println("connect server successed \n")//给自己取一个昵称吧fmt.Printf("Make a nickname:")fmt.Scanf("%s", &nick)fmt.Println("hello : ", nick)conn.Write([]byte("nick|" + nick))go Handle(conn)var msg stringfor {msg = ""fmt.Scan(&msg)conn.Write([]byte("say|" + nick + "|" + msg))if msg == "quit" {conn.Write([]byte("quit|" + nick))break}}}func Handle(conn net.Conn) {for {data := make([]byte, 255)msg_read, err := conn.Read(data)if msg_read == 0 || err != nil {break}fmt.Println(string(data[0:msg_read]))}
}

程序截图

 

不同语言间的通信: https://blog.csdn.net/dyd961121/article/details/81355147

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27055.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang 从零开始实现多人聊天室(三)上线通知与公屏聊天

系列文章目录 跟着😽猫猫学Golang,快人一步 系列初开,跟着我走进Go 语言的世界里🌍 系列目录 Golang 从零开始实现多人聊天室(一)服务端监听 Golang 从零开始实现多人聊天室(二)客…

商务人士邮箱推荐?高大上邮箱来了!

既然点进文章那不用多说,大家肯定都是商务人士。在普通人眼里商务人士就等于精英人士,他们的行头都是一身西装梳着根根分明的大背头,他们会多国语言精通各种数字,总之就是看起来很厉害每天很精致。那商务人士到底是不是这样呢我也…

商务人士适合用什么邮箱?一款商务人士必备的邮箱推荐

在商务及办公场合中,电子邮箱的使用越加频繁,对于邮箱的选择安全及易用性成为了重中之重。 如果你是金融、互联网、法律、机关单位等领域的商务人士,或者你需要将邮箱作为对外的入口,对你而言,一个可靠的付费邮箱是非…

国内好用的邮箱评选,电子邮箱大全有你的吗?

国内邮箱、好用的邮箱、电子邮箱大全、163邮箱、TOM邮箱、邮箱品牌 早在三国时期,一种说法便流传至今,这酒是“三分天下”,最早是指三国时期魏、蜀、吴三国鼎立并且互相牵制的局面。在现代,也常常引用“三分天下”来形容某市场或…

你知道大量群发邮件用什么邮箱好吗?

随着社会的发展,我们的销售模式也在发生这巨大的变化,在之前我们的销售模式主要靠在线下的各种人的走街串巷的来进行营销,但是随着我们科技的进步,互联网也成为了我们生活中密不可分的一部分,在这时候一种全新的营销模…

堪称最佳邮箱Gmail邮箱的神奇的一号多名功能

QQ邮箱支持添加一个英文用户名的foxmail邮箱,已经比很多邮箱好用,但是gmail邮箱的一号多名的功能更为神奇,一个邮箱账号可以变成无数个邮箱,对于需要很多邮箱账号的情形,比如注册网络小号,非常有用&#xf…

推荐国内外,安全好用的电子邮箱

众多邮箱品牌,人们熟悉QQ、网易、新浪,较之而言,TOM邮箱更具安全性、实用性。小编整理分析详情如下。 性价比高、功能实用:TOM含免费邮箱,又相继推出了极致邮、畅享邮,后两款为VIP付费邮箱,容量…

最近沉迷美女图片无法自拔,所以我决定用PHP扒海量妹子图

为什么80%的码农都做不了架构师?>>> 学习PHPMySQL制作WEB应用有一阵子了,没有上过学所以只能学习到CURD的地步。 最近对国产美女图片、私房写真特别感兴趣,什么周妍希、刘飞儿、李可可、推女郎我一个都不知道~~ 经常调查我发现一…

TA(技术美术)宝藏网站

TA(技术美术)宝藏网站 我们不生产TA我们只是TA的搬运工(感谢马甲大佬总结!?)T部分(技术相关)1.Shadertoy2.GLSL SandboX3.candycat的博客4.关于raymarching5.minionsart大神6.冯委大…

杜凯杰教学数据分析:python 图片爬取 爬取各校校花图片

python 图片爬取 爬取各校校花图片 —杜凯杰 爬取十页校花图片(可按需求更改页数,爬取更多图片)—杜凯杰 import requests from lxml import etree startUrlhttp://www.xiaohuar.com/list-1- headers{User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleW…

chatgpt赋能python:Python如何操作Word文档

Python如何操作Word文档 简介 Python是一种高级编程语言,具有易于学习和使用、高效、可移植性强等优点。相信许多Python开发者都遇到过需要使用Python操作Word文档的情况。本文旨在介绍如何使用Python操作Word文档,使开发者能够方便地实现自己的需求。…

Word2vec工作原理

文章目录 前言Word2Vec的工作原理CBOWSkip-Gram 参考文献点关注,防走丢,如有纰漏之处,请留言指教,非常感谢 前言 随着计算机应用领域的不断扩大,自然语言处理受到了人们的高度重视。尤其是最近出现的chatgpt&#xff0…

GPT-3 vs Bert vs GloVe vs Word2vec 文本嵌入技术的性能对比测试

来源:DeepHub IMBA 本文约3000字,建议阅读6分钟 随着NLP(自然语言处理)的最新进展,OpenAI的GPT-3已经成为市场上最强大的语言模型之一。 2022年1月25日,OpenAI公布了一个embedding endpoint(Neelakantan et al., 2022)…

人大李崇轩:我的生成模型修炼之路丨智源大会嘉宾风采

导读 AIGC的飞速发展离不开生成模型、深度学习以及多模态学习等领域研究的不断累积,其中生成模型的原理与算法发展是不可或缺的一部分,如:生成对抗网络 GAN 及其一系列变体、变分自编码器 VAE 及其一系列变体、自回归模型 AR、流模型 FLOW &a…

一篇文章教会你用Python抓取抖音app热点数据

今天给大家分享一篇简单的安卓app数据分析及抓取方法。以抖音为例,我们想要抓取抖音的热点榜数据。 要知道,这个数据是没有网页版的,只能从手机端下手。 首先我们要安装charles抓包APP数据,它是一款收费的抓包修改工具&#xf…

22.网络爬虫—APP数据抓取详讲

网络爬虫—APP数据抓取详讲 Fiddler工作原理安装完成Fiddler后的配置前提条件工具配置 手机数据抓取Fiddler手机端配置手机端操作 实战演示后记 前言: 🏘️🏘️个人简介:以山河作礼。 🎖️🎖️:Python领域新…

29 - Excel 图表与数据分析

Day 29 一、Excel的图表 1.图表的作用 数据图表可直观展示统计信息属性(时间性、数量性等),对知识挖掘和信息直观生动感受起关键作用的图形结构,是一种很好的将对象属性数据直观、形象地"可视化"的手段。 数据图表可…

48种数据分析可视化图表

可视化对于数据分析师来说可能不是最重要的,重要的是你分析或挖掘出来的结果是否有效。在这基础之上就需要通过可视化恰当完整的表达见解。这里又有区别了:实用性和美观性哪个更重要?要我说实用性是第一位的,能用一个元素表达最好…

我们做了一款AI口语外教,寻找测试用户

因为自己学雅思,做了一个AI口语外教,用来练习口语 有两种模式:1.自由对话2.雅思练习与模拟考试 优点如下:1.语音合成真实,聊起来有趣2.参考提示,解决你不会的问题3.雅思模式严格按照话题进行,…

使用new bing来阅读文献

1.下载安装Microsoft Edge Dev版本 Microsoft Edge 预览体验成员 (microsoftedgeinsider.com) 2.打开设置中的discover 3.打开必应 (bing.com) 改地区为美国,账号新建时地区也要改为美国 节点也需要改为美国 4.使用聊天机器人来问一些学术问题 5.打开pdf&…