即时通讯系统 -- 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
}
分类:
后端开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!