服务器块关键代码:

根据协议调用不同的命令,我这边以“who:”查询用户是否在线,“rename:XXX”进行用户名更改,“to:XXX:msg”触发私聊

 if len(msgStr)>7 && msgStr[:7]=="rename:" {this.server.userRename(this.Conn.RemoteAddr().String(),strings.Split(msgStr,":")[1])} else if len(msgStr)==4 && msgStr[:4]=="who:" {this.server.getUserList(this.Conn.RemoteAddr().String())}else if len(msgStr)>4 && msgStr[:3]=="to:" {if len(strings.Split(msgStr,":"))==3 {this.server.sendMsg(strings.Split(msgStr,":")[1],this.Conn.RemoteAddr().String(),this.Name,strings.Split(msgStr,":")[2])}}

根据命令查询相应的用户列表做对应操作。


func (this *Server) sendMsg(sendUsername string,fromUserip string,fromUsername string,msg string){this.userMutex.Lock()for _, v := range this.users {if v.Name == sendUsername {sendMsg := "[" + fromUserip +"]"+fromUsername+": " +msg+"\n"_,err := v.Conn.Write([]byte(sendMsg))if err != nil {fmt.Println("server brodCast err:",err)}}}this.userMutex.Unlock()
}func (this *Server) getUserList(ip string) {this.userMutex.Lock()user ,ok := this.users[ip]if ok {for _, v := range this.users {sendMsg := "[" + v.Conn.RemoteAddr().String()+"]"+v.Name+"\n"_,err := user.Conn.Write([]byte(sendMsg))if err != nil {fmt.Println("server brodCast err:",err)}}} else {println("user no found!")}this.userMutex.Unlock()
}func (this *Server) userRename(ip string,name string) {this.userMutex.Lock()_ ,ok := this.users[ip]if ok {this.users[ip].Name = name} else {println("user no found!")}this.userMutex.Unlock()
}

实现效果:

目录:

Golang 从入门到放弃

Golang TCP服务器用户修改名字、查询用户在线以及私聊功能相关推荐

  1. OIM实现OIM用户修改、OIM用户Disable流程审批

    OIM产品本身实现了用户自注册.用户自修改.管理员为OIM User申请/启用/禁用/回收Resource的流程管理,但是没有实现用户修改和用户Disable的流程审批的.为了实现这个目标需要按照以下 ...

  2. mc服务器怎么修改名字指令,端游网易我的世界怎么改名字

    快速游戏如何更改我的世界名称 首先,下一个MC客户端,然后启动执行器,将弹出一个基本设置,而不是直接进入启动器. 该设置可以设置名称(您也可以设置我可以的(忘记).注意:如果名称不能用中文和全角符号注 ...

  3. 如何查看服务器最后修改时间,查询服务器上所有数据库的最后更新时间

    我们可以通过以下语句查询单个数据库中所有表的创建日期.最后更新日期:select * from sys.tables 同时也可以通过以下语句查询服务器上所有在线的数据库:select * from s ...

  4. 魔兽怀旧服服务器怎么修改,《魔兽世界怀旧服》转服功能怎么用 转服功能使用方法教程...

    导 读 魔兽世界怀旧服不少玩家都处在高负载服务器中,这不仅对于服务器压力太大,而且对于玩家的游戏体验也不好,近期魔兽世界怀旧服免费角色转移功能开放,缓解玩家的压力和带来更好的游戏体验,下面小编就给大家 ...

  5. MySQL普通用户修改密码

    普通用户修改密码 普通用户,也可以修改自己的密码 否则,普通每次修改密码时还需要通知管理员 普通用户,登录到MySQL服务器后,通过SET语句,设置自己的密码 语法格式 SET PASSWORD=PA ...

  6. 通达信服务器维修点查询,通达信验证服务器数据库修改

    通达信验证服务器数据库修改 内容精选 换一换 业界对备份一致性的定义包括如下三类:不一致备份:备份的文件.磁盘不在同一个时间点.云备份中的云服务器备份提供对弹性云服务器和裸金属服务器的基于多云硬盘一致 ...

  7. 详解Linux系统的用户管理——添加用户、删除用户、查询用户信息、切换用户、用户组

    Linux系统的用户管理 用户管理的规则 添加用户 基本语法 实际案例 细节说明 给用户指定或者修改密码 基本语法 应用案例 删除用户 基本语法 应用案例 删除用户注意事项 查询用户信息 基本语法 应 ...

  8. android王者调不了界面,王者荣耀登入界面修改方法 ios用户无法修改

    :原标题:王者荣耀登入界面修改方法 ios用户无法修改 王者荣耀登陆界面怎么修改呢?其实游戏的登录界面是可以更换的,只不过大家都不知道该如何换了,那下面就让小编来给大家介绍下登陆界面修改方法吧. 王者 ...

  9. svn java注释_svn 强制用户添加注释 和 允许用户修改注释

    当我们用TortoiseSVN提交代码时,有很多人不喜欢写注释,导致以后代码版本多,也不清楚哪个版本到底改了什么东西.所以在提交的时候,我会强制要求添加注释.这是如何实现的?这个话题就涉及到了svn的 ...

最新文章

  1. 在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统
  2. python win32console_python、unicode和windows控制台
  3. PHP处理Checkbox复选框表单提交
  4. Java知识整理——ServletJSP
  5. xcode 创建模拟器_Xcode编译WebKit
  6. c语言excel转pdf,基于C语言和Excel软件下光速测量仪测量玻璃折射率.pdf
  7. 随想录(linux下的pv操作)
  8. ABB RobotStudio6.08安装
  9. 《Android 第1行代码》读后感—第11章【Android 特色开发——基于位置的服务】
  10. (2)从文件中解析JSON数据
  11. Linux基础(八)服务器RAID及配置
  12. ensp官方停止下载
  13. 9月全球搜索引擎市场份额:7个版本Google上榜
  14. 又是一江春水自东流!
  15. 修改RAC中的私网地址导致CRS启动失败
  16. navigator对象的主要属性介绍
  17. 32g服务器做成虚拟,服务器32g内存 tomcat设置多大
  18. 百度SEO快排系统都有哪些类别?【系统之间的区别】
  19. VS 2017生成exe(msi)文件
  20. 父子或兄弟div元素边距重叠

热门文章

  1. 认知无线电网络中的用户
  2. 【Java课程设计】基于Java Swing 的图书管理系统
  3. 【Java面试宝典】1000+面试题附答案详解,最全面详细
  4. Matplotlib.pyplot 常用方法(一)
  5. C语言 课程设计——职工信息管理系统
  6. netbeans java项目_如何在NetBeans中组合两个Java项目
  7. 爬虫(Spider)与反爬虫(Anti-Spider)
  8. Nginx源码学习(一):nginx进程模型解析
  9. nginx 源码编译、安装
  10. 提取文件内容需要什么工具?