即时通讯系统 -- V0.5客户端连接与命令行解析
本次实现了客户端与服务器的连接,不过客户端仍是终端下的,不是UI(水平太低了)
并且实现命令行解析 ./client -ip 17.0.0.1 -port 8888
可把命令行中的参数传递进去
package main
import (
"flag"
"fmt"
"net"
)
type Client struct {
ServerIp string
ServerPort int
Name string
conn net.Conn
}
func NewClient(serverIp string, serverPort int) *Client {
//常见客户端对象
client := &Client{
ServerIp: serverIp,
ServerPort: serverPort,
}
//连接server
conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", serverIp, serverPort))
if err != nil {
fmt.Println("net.Dial error:", err)
return nil
}
client.conn = conn
//返回对象
return client
}
var serverIp string
var serverPort int
func init() {
//./client -ip 127.0.0.1 -port 8888
flag.StringVar(&serverIp, "ip", "127.0.0.1", "设置服务器IP地址(默认是127.0.0.1)")
flag.IntVar(&serverPort, "port", 8888, "设置服务区端口(默认是8888)")
}
func main() {
//命令行解析
flag.Parse()
client := NewClient(serverIp, serverPort)
if client == nil {
fmt.Println(">>>>> 连接服务器失败...")
return
}
fmt.Println(">>>>> 连接服务器成功...")
select {}
}
总结:
-
flag包可提供命令行解析功能,以
flag.StringVar(&serverIp, "ip", "127.0.0.1", "设置服务器IP地址(默认是127.0.0.1)")
为例
在终端输入./client -ip xxx
则表示把 xxx 传给 serverIp,默认为 127.0.0.1,输入 ./client -h 出现相关提示 -
连接 server 代码
//连接server
conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", serverIp, serverPort))
if err != nil {
fmt.Println("net.Dial error:", err)
return nil
}