1 Star 0 Fork 0

叶明志 / golang练习

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
login.go 2.16 KB
一键复制 编辑 原始数据 按行查看 历史
yemingzhi 提交于 2020-03-17 16:27 . 乱写的,没提交
package main
import (
"GolangLearnPractice1/chatroom/common/message"
"encoding/binary"
"encoding/json"
"fmt"
"net"
)
//写一个函数,完成登录
func login(userId int, userPwd string) (err error) {
//下一个就要开始定协议..
// fmt.Printf(" userId = %d userPwd=%s\n", userId, userPwd)
// return nil
//1. 链接到服务器
conn, err := net.Dial("tcp", "localhost:8889")
if err != nil {
fmt.Println("net.Dial err=", err)
return
}
//延时关闭
defer conn.Close()
//2. 准备通过conn发送消息给服务
var mes message.Message
mes.Type = message.LoginMesType
//3. 创建一个LoginMes 结构体
var loginMes message.LoginMes
loginMes.UserId = userId
loginMes.UserPwd = userPwd
//4. 将loginMes 序列化
data, err := json.Marshal(loginMes)
if err != nil {
fmt.Println("json.Marshal err=", err)
return
}
// 5. 把data赋给 mes.Data字段
mes.Data = string(data)
// 6. 将 mes进行序列化化
data, err = json.Marshal(mes)
if err != nil {
fmt.Println("json.Marshal err=", err)
return
}
// 7. 到这个时候 data就是我们要发送的消息
// 7.1 先把 data的长度发送给服务器
// 先获取到 data的长度->转成一个表示长度的byte切片
var pkgLen uint32
pkgLen = uint32(len(data))
var buf [4]byte
binary.BigEndian.PutUint32(buf[0:4], pkgLen)
// 发送长度
n, err := conn.Write(buf[:4])
if n != 4 || err != nil {
fmt.Println("conn.Write(bytes) fail", err)
return
}
//fmt.Printf("客户端,发送消息的长度=%d 内容=%s", len(data), string(data))
// 发送消息本身
_, err = conn.Write(data)
if err != nil {
fmt.Println("conn.Write(data) fail", err)
return
}
//休眠20
// time.Sleep(20 * time.Second)
// fmt.Println("休眠了20..")
// 这里还需要处理服务器端返回的消息.
mes, err = readPkg(conn) // mes 就是
if err != nil {
fmt.Println("readPkg(conn) err=", err)
return
}
//将mes的Data部分反序列化成 LoginResMes
var loginResMes message.LoginResMes
err = json.Unmarshal([]byte(mes.Data), &loginResMes)
if loginResMes.Code == 200 {
fmt.Println("登录成功")
} else if loginResMes.Code == 500 {
fmt.Println(loginResMes.Error)
}
return
}
Go
1
https://gitee.com/yemingzhi/GolangLearnPractice1.git
git@gitee.com:yemingzhi/GolangLearnPractice1.git
yemingzhi
GolangLearnPractice1
golang练习
2bf136849dce

搜索帮助