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

}

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