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

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章