Fetch the repository succeeded.
package main
import(
"net"
"GolangLearnPractice1/day9/chat/proto"
"encoding/json"
"fmt"
"encoding/binary"
// "bufio"
"errors"
)
func readPackage(conn net.Conn)(msg proto.Message,err error){
var buf [8192]byte
n,err:=conn.Read(buf[0:4])
if n!=4{
err=errors.New("read header failed")
return
}
fmt.Println("read package:",buf[0:4])
var packLen uint32
packLen=binary.BigEndian.Uint32(buf[:4])
fmt.Printf("receive len:%d",packLen)
n,err=conn.Read(buf[:packLen])
if n!=int(packLen){
err=errors.New("read body failed")
return
}
fmt.Printf("receive data:%s\n",string(buf[:packLen]))
return
}
func login(conn net.Conn)(err error){
var msg proto.Message
msg.Cmd=proto.UserLogin
var loginCmd proto.LoginCmd
loginCmd.Id=1
loginCmd.Passwd="123456789"
data,err:=json.Marshal(loginCmd)
if err!=nil{
return
}
msg.Data=string(data)
data,err=json.Marshal(msg)
if err!=nil{
return
}
var buf [4]byte
packLen:=uint32(len(data))
fmt.Println("packlen:",packLen)
binary.BigEndian.PutUint32(buf[:4],packLen)
n,err:=conn.Write(buf[:])
if err!=nil||n!=4{
fmt.Println("write data failed")
return
}
_,err=conn.Write([]byte(data))
if err!=nil {
return
}
msg,err=readPackage(conn)
if err!=nil{
fmt.Println("read package failed,err:",err)
}
fmt.Println(msg)
return
}
func register(conn net.Conn)(err error){
var msg proto.Message
msg.Cmd=proto.UserRegister
var registerCmd proto.RegisterCmd
registerCmd.User.UserId=1
registerCmd.User.Nick="stu01"
registerCmd.User.Sex="man"
registerCmd.User.Passwd="123456789"
registerCmd.User.Header="http://baidu.com/header/1.jpg"
data,err:=json.Marshal(registerCmd)
if err!=nil{
return
}
msg.Data=string(data)
data,err=json.Marshal(msg)
if err!=nil{
return
}
var buf [4]byte
packLen:=uint32(len(data))
fmt.Println("packlen:",packLen)
binary.BigEndian.PutUint32(buf[:4],packLen)
n,err:=conn.Write(buf[:])
if err!=nil||n!=4{
fmt.Println("write data failed")
return
}
_,err=conn.Write([]byte(data))
if err!=nil{
return
}
msg,err=readPackage(conn)
if err!=nil{
fmt.Println("read package failed,err:",err)
}
fmt.Println(msg)
return
}
func main() {
conn,err:=net.Dial("tcp","localhost:10000")
if err!=nil{
fmt.Println("Error dialing",err.Error())
return
}
err=login(conn)
if err!=nil{
fmt.Println("login failed,err:",err)
return
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。