客户端代码:
注:go get github.com/lxn/walk
package main
import (
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
"net"
)
const (
IP = "127.0.0.1:8888"
)
func main() {
var mw *walk.MainWindow
var uname, pwd *walk.LineEdit
(MainWindow{
AssignTo: &mw,
Title: "织梦多站点管理系统",
MinSize: Size{218, 170},
Size: Size{218, 170},
MaxSize: Size{218, 170},
Layout: VBox{},
Children: []Widget{
Label{
Text: "织梦多站点管理系统",
Font: Font{
PointSize: 10,
Family: "微软雅黑",
},
},
LineEdit{
AssignTo: &uname,
MinSize: Size{0, 25},
CueBanner: "用户名",
Font: Font{
PointSize: 10,
Family: "微软雅黑",
},
},
LineEdit{
AssignTo: &pwd,
MinSize: Size{0, 25},
PasswordMode: true,
CueBanner: "密码",
Font: Font{
PointSize: 10,
Family: "微软雅黑",
},
},
HSplitter{
Children: []Widget{
CheckBox{
Text: "记住密码",
},
CheckBox{
Text: "自动登陆",
},
},
},
HSplitter{
Children: []Widget{
PushButton{
Text: "登陆",
MinSize: Size{0, 30},
OnClicked: func() {
if uname.Text() == "" {
walk.MsgBox(mw, "错误", "请输入您的用户名!", walk.MsgBoxIconInformation)
return
} else if pwd.Text() == "" {
walk.MsgBox(mw, "错误", "请输入您的密码!", walk.MsgBoxIconInformation)
return
}
//链接socket发送数据
connectServer(mw, uname.Text(), pwd.Text())
},
},
PushButton{
Text: "取消",
MinSize: Size{0, 30},
OnClicked: func() { mw.Close() },
},
},
},
},
}).Run()
}
//链接socket发送数据
func connectServer(mw *walk.MainWindow, uname, pwd string) {
buf := make([]byte, 1024)
connect, err := net.Dial("tcp", IP)
if err != nil {
walk.MsgBox(mw, "错误", "服务器连接错误!", walk.MsgBoxIconInformation)
return
}
connect.Write([]byte(uname + "," + pwd))
c, err := connect.Read(buf)
walk.MsgBox(mw, "错误", string(buf[0:c]), walk.MsgBoxIconInformation)
defer connect.Close()
}
服务端代码:
package main
import (
"fmt"
"net"
)
const (
ADDR = "127.0.0.1"
PORT = 8888
)
var exit chan bool
func main() {
exit = make(chan bool)
ip := net.ParseIP(ADDR)
adr := net.TCPAddr{ip, PORT, ""}
go func() {
listener, err := net.ListenTCP("tcp", &adr)
if err != nil {
fmt.Println("服务器启动失败!")
exit <- true
return
}
for {
cdata := make([]byte, 1024)
client, err := listener.AcceptTCP()
if err != nil {
fmt.Println(err.Error())
continue
}
fmt.Println(client.RemoteAddr().String())
c, err := client.Read(cdata)
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(string(cdata[0:c]))
client.Write([]byte("你好客户端!" + string(cdata[0:c])))
client.Close()
}
}()
<-exit
}