利用去语言实现多人聊天室实例教程

  

  

运用去里面的净包中的相关方法来实现一个基于tcp的简单多人聊天室,用一个服务器来管理,主要反馈客户端是否连接成功并显示客户端输入的内容,并且发送给每一个在服务器上连接的客服端、下面话不多说了,来一起看看详细的介绍吧。

  

  

<>强服务器代码

     //服务器   主要包   导入(   “fmt”   “净”   )      var ConnMap map [string] * net.TCPConn   func checkErr int(错错误){   如果犯错!=nil {   如果err.Error ()==癊OF”{   fmt.Println(“用户退出”)   返回0   }   fmt.Println(“发生错误”)   返回1   }   返回1   }   func表示(tcpConn * net.TCPConn) {   为{   数据:=([]字节,256)   总犯错:=tcpConn.Read(数据)   如果犯错!=nil {   fmt.Println (string(数据总量[:]),呃)   其他}{   fmt.Println (string(数据总量[:]))   }   国旗:=checkErr (err)   如果标志==0 {   打破   }   _,康涅狄格州:=范围ConnMap {   如果conn.RemoteAddr () .String ()==tcpConn.RemoteAddr () .String () {   继续   }   conn.Write(数据(总):)   }   }   }   函数main () {//var康涅狄格州net.TCPConn//localAddr:=conn.LocalAddr () .String ()//fmt.Println (localAddr)//tcpAddr _:=net.ResolveTCPAddr (“tcp localAddr)   tcpAddr _:=净。ResolveTCPAddr (“tcp”、“192.168.128.216:8080”)   tcpListen _:=净。tcpAddr ListenTCP (tcp)   ConnMap=使(map [string] * net.TCPConn)   为{   tcpConn _:=tcpListen.AcceptTCP ()   推迟tcpConn.Close ()   .String ConnMap [tcpConn.RemoteAddr () ())=tcpConn   fmt。Println(“连接客户端信息:“,tcpConn.RemoteAddr () .String ())   去说(tcpConn)   }   }      

本来打算用系统的<代码> LocalAddr() 函数来直接调用本地网络地址,但是这里调用一直报格式的错误,所以这里用本地地址直接输在里面,端口是8080//192.168.247.128:8080,也可以改成和客户端相似的代码来进行调用,但鉴于服务器唯一,所以就不做更改了

  

<强>客户端代码

     //客户端   主要包   导入(   “fmt”   “净”   “操作系统”   )      var ch陈int=让陈(int)   var昵称字符串   func读者(康涅狄格州* net.TCPConn) {   迷:=([]字节,256)   为{   j,犯错:=conn.Read(浅黄色)   如果犯错!=nil {   ch & lt; - 1   打破   }   fmt。Printf (" % s \ n ",迷[0:j])   }   }   函数main () {   如果len (os.Args) !=2 {   fmt.Fprintf(操作系统。Stderr,“用法:% s主机:端口”,os.Args [0])   os.Exit (1)   }   服务:=os.Args [1]   TcpAdd _:=净。ResolveTCPAddr (“tcp服务)//TcpAdd _:=净。ResolveTCPAddr (“tcp”、“localhost: 8080”)   康涅狄格州,犯错:=净。DialTCP (tcp, nil, TcpAdd)   如果犯错!=nil {   fmt.Println(“服务没打开”)   os.Exit (1)   }   推迟conn.Close ()   读者(康涅狄格州)   fmt.Println(“请输入昵称”)   fmt.Scanln(及昵称)   fmt。Println(“你的昵称是:“,昵称)//var str字符串   为{   var味精字符串   fmt.Scan(和味精)   fmt.Print (“& lt;”+昵称+“比”;+ "说:")//因为我_:=范围味精{//fmt。Printf (" % c”、味精[我])//}   fmt.Println(味精)   b:=[]字节(“& lt;”+昵称+“比”;+ "说:" +味精)   conn.Write (b)   选择{   案例& lt; ch:   fmt.Println(“服务器发生错误,请重新连接”)   os.Exit (2)   默认值:   }   }   }      

客户端主要就是向服务器发起连接,然后发送和接收数据,原计划定义一个字符切片来存储读来的数据,但是出现了调用fmt.Println()来输出是时候显示ASCII码的错误,所以改成直接往一个空字符串里面读写,然后再来调用<代码> fmt.Println() ,显示出正确的字符串

  

<>强运行服务器

  

<代码>去构建server.go

  

<代码>。/服务器

  

或,<代码>去运行server.go

  

<>强运行客户端

  

<代码>去构建client.go

  

。/客户服务器地址:端口(上面例子是192.168.247.128:8080)

  

利用去语言实现多人聊天室实例教程”> <br/>
  </p>
  <p> </p>
  <p>以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。<h2 class=利用去语言实现多人聊天室实例教程