login.go

package main

import (
“net”
“fmt”
“encoding/json”
“encoding/binary”
)

//写一个函数,完成登陆
func login(userId int,userPwd string)(err error){
//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[0:4])
if n!=4||err!=nil{
fmt.Println(“conn.Write(bytes)fail”,err)
return
}
//fmt.Printf(“客户端,发送消息得长度%d”,len(data),string(data))
//发送消息本身
_,err = conn.Write(data)
if err!=nil{
fmt.Println(“conn.write(data)fail”,err)
return
}
//这里还需要处理服务器端返回的消息,
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),&loginMes)
if loginResMes.Code200 {
fmt.Println(“登陆成功”)
}else if loginResMes.Code
500 {
fmt.Println(loginResMes.Error)
}
return

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值