Files
tcpserver-client/Server/SubServer.go
T
2021-05-04 20:31:47 +08:00

65 lines
1.8 KiB
Go

package main
// 可用服务器
// 每间隔3s,主动连接一次AddrServer,从而让AddrServer更新IP
import (
"TCPServerClient/utils"
"fmt"
"net"
"strconv"
"time"
)
const (
DefaultAddrServerIP = "localhost" // 地址服务器IP
DefaultAddrServerPort = 50000 // 地址服务器端口号
DefaultSyncInfo = "Sync Addr" // 同步IP地址的命令字段
DefaultPassword = "12345678" // 消息加解密密码。必须是八位
)
type SubServer struct {
addrServerIP string // 地址服务器IP
addrServerPort int // 地址服务器端口号
syncInfo string
password string
}
// 开启server,并建立监听
func (s *SubServer) start() {
fmt.Println("Starting the sub server ...")
// 初始化
s.addrServerIP=DefaultAddrServerIP
s.addrServerPort=DefaultAddrServerPort
s.password=DefaultPassword
s.syncInfo=DefaultSyncInfo
// 循环同步本机IP到地址服务器
s.doSubServerStuff()
}
/**
循环同步本机IP到地址服务器,间隔三秒
*/
func (s *SubServer) doSubServerStuff() {
for {
// 睡眠三秒
time.Sleep(time.Second*3)
// 创建TCP连接,连接地址服务器
conn, err := net.Dial("tcp", s.addrServerIP+":"+strconv.Itoa(s.addrServerPort))
if err != nil {
// 由于目标计算机积极拒绝而无法创建连接
fmt.Println("Error dialing to addr server", err.Error())
continue
}else{
fmt.Println("Successful conn to addr server : "+conn.RemoteAddr().String())
}
// 发送加密请求给服务器
_, err = conn.Write([]byte(utils.EncryptMsgByDES(s.syncInfo, s.password)))
if err != nil {
fmt.Println("Error writing", err.Error())
}else{
fmt.Println("Successful send addr info to addr server : "+conn.RemoteAddr().String())
}
// 关闭本次连接
_ = conn.Close()
}
}