博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang实现聊天室(五)
阅读量:2487 次
发布时间:2019-05-11

本文共 2065 字,大约阅读时间需要 6 分钟。

golang实现聊天室(五)

完成服务端广播消息

server

package mainimport (	"fmt"	"log"	"math/rand"	"net")type Client_list struct {	list map[net.Conn]string}func main() {	client_list := Client_list{make(map[net.Conn]string, 0)}	var conn, err = net.Listen("tcp","127.0.0.1:6888")	if err != nil {		return	}	for {		c, err := conn.Accept()		if err != nil {			return		}		go client_list.Receive(c)	}}//noinspection GoUnresolvedReferencefunc (client_list *Client_list) Receive(c net.Conn) {	for {		reveive_byte := make([]byte, 256)		lens, err := c.Read(reveive_byte)		if err != nil {			log.Fatal("Receive error")		}		reveive_byte = reveive_byte[:lens]		fmt.Printf("%s\n", reveive_byte)		client_list.BroadMessage(c)	}}func (client_list *Client_list) BroadMessage(c net.Conn) {	// 用户信息唯一表,唯一标识码	user := rand.Int() % 2	client_list.list[c] = string(user)	// 遍历map表	for clientKey, _ := range client_list.list{		if clientKey == c {			continue		}		var _, err = clientKey.Write([]byte("服务器广播消息"))		if err != nil {			log.Fatal("Wrong about abroad message")		}	}}

client1

package mainimport (	"fmt"	"log"	"net"	"time")func main() {	var conn, err = net.DialTimeout("tcp", "127.0.0.1:6888", 30*time.Second)	if err != nil {		log.Fatal("conn error")	}	for {		conn.Write([]byte("user 2\n "))		time.Sleep(5 * time.Second)		re_message := make([]byte, 255)		length, err := conn.Read(re_message)		if err != nil {			return		}		re_message = re_message[:length]		fmt.Printf("%s\n", re_message)	}	conn.Close()}

client2

package mainimport (	"fmt"	"log"	"net"	"time")func main() {	var conn, err = net.DialTimeout("tcp", "127.0.0.1:6888", 30*time.Second)	if err != nil {		log.Fatal("conn error")	}	for {		conn.Write([]byte("user 2\n "))		time.Sleep(5 * time.Second)		re_message := make([]byte, 255)		length, err := conn.Read(re_message)		if err != nil {			return		}		re_message = re_message[:length]		fmt.Printf("%s\n", re_message)	}	conn.Close()}

小结

  1. 完成了服务端客户端通信的基本模型
  2. 客户端建立连接,服务端存储客户端基本信息
  3. 服务端根据map信息广播消息

下期目标

  1. 指定用户名作为唯一信息map
  2. 从命令行接收发送信息
  3. 服务端广播唯一客户端发送的信息,给除这个客户端以外的客户端信息
  4. 当客户端退出时,服务端监测,并从map删除,广播消息给其他客户端
  5. 客户端可使用加密算法,对发送信息加密再发送

转载地址:http://gkorb.baihongyu.com/

你可能感兴趣的文章
海龟交易法则01_玩风险的交易者
查看>>
CTA策略02_boll
查看>>
vnpy通过jqdatasdk初始化实时数据及历史数据下载
查看>>
设计模式19_状态
查看>>
设计模式20_观察者
查看>>
vnpy学习10_常见坑02
查看>>
用时三个月,终于把所有的Python库全部整理了!拿去别客气!
查看>>
pd.stats.ols.MovingOLS以及替代
查看>>
vnpy学习11_增加测试评估指标
查看>>
资金流入流出计算方法
查看>>
海龟交易法则07_如何衡量风险
查看>>
海龟交易法则08_风险与资金管理
查看>>
海龟交易法则09_海龟式积木
查看>>
海龟交易法则10_通用积木
查看>>
海龟交易法则14_掌控心魔
查看>>
海龟交易法则16_附原版海龟交易法则
查看>>
克罗谈投资策略01_期货交易中的墨菲法则
查看>>
克罗谈投资策略02_赢家和输家
查看>>
克罗谈投资策略03_你所期望的赌博方式
查看>>
克罗谈投资策略04_感觉与现实
查看>>