代码拉取完成,页面将自动刷新
package main
import (
"empty_zinx/src/znet"
"fmt"
"io"
"net"
"time"
)
// 模拟客户端
func main() {
fmt.Println("client start...")
time.Sleep(1 * time.Second)
//1 直接连接远程服务器,得到一个conn连接
conn, err := net.Dial("tcp", "127.0.0.1:8999")
if err != nil {
fmt.Println("client start err, exit!")
return
}
for {
// 发送封包的消息 MsgID:0
dp := znet.NewDataPack()
msg, err := dp.Pack(znet.NewMessage(0, []byte("ZinxV0.5 client Test Message")))
if err != nil {
fmt.Println("Packet error, exit!", err)
return
}
_, err = conn.Write(msg)
if err != nil {
fmt.Println("Write error, exit!", err)
return
}
// 服务器应该回复我们一个message数据, MsgID:1
binaryHead := make([]byte, dp.GetHeadLen())
if _, err := io.ReadFull(conn, binaryHead); err != nil {
fmt.Println("ReadFull error, exit!", err)
return
}
// 先读取流中的Head部分 得到ID 和 dataLen
msgHead, err := dp.UnPack(binaryHead)
if err != nil {
fmt.Println("UnPack error, exit!", err)
return
}
if msgHead.GetMsgBodyLen() > 0 {
// msg是有数据的
// 再根据DataLen进行第二次读取, 将data读出来
msg := msgHead.(*znet.Message)
msg.SetMsgBody(make([]byte, msg.GetMsgBodyLen()))
if _, err := io.ReadFull(conn, msg.GetMsgBody()); err != nil {
fmt.Println("ReadFull error, exit!", err)
return
}
fmt.Println("recv msg:", string(msg.GetMsgBody()))
}
//cpu阻塞
time.Sleep(1 * time.Second)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。