功能支持
|1.修改用户名————do
r
e
n
a
m
e
rename
rename"修改的用户名"
| 例如:修改用户名为java,do
r
e
n
a
m
e
rename
renamejava
|2.查看所有在线用户————do$list
|3.查看历史消息,最多支持查看10条
|4.用户上线提醒
package main
import (
"bufio"
"fmt"
"net"
"os"
"strings"
)
//端口常量
const (
PORT = 39003
)
var NAME string
func main() {
host := "127.0.0.1"
port := "39003"
//监听端口
conn, err := net.Dial("tcp", host+":"+port)
if err != nil {
fmt.Println(err.Error())
return
} else {
fmt.Println("请输入你的用户名:")
fmt.Println("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓")
fmt.Scan(&NAME)
if firstSetName(NAME, conn) != nil {
return
}
fmt.Println("服务端连接成功", conn.RemoteAddr(), " 你可以开始聊天了!!!")
str := `
目前支持操作:
****************************************************
|1.修改用户名————do$rename$"修改的用户名"
| 例如:修改用户名为java,do$rename$java
|
|2.查看所有在线用户————do$list
|3.查看历史消息,最多支持查看10条
|4.用户上线提醒
****************************************************
`
fmt.Printf("%sn", str)
}
//接收信息服务
// NAME = conn.LocalAddr().String()
go func() {
buf := make([]byte, 1024*5)
for {
// fmt.Println("读取回写内容")
n, err := conn.Read(buf)
if err != nil {
fmt.Println("回写失败" + err.Error())
return
}
if isout := string(buf[:n]); isout == "false" {
continue
}
msg := string(buf[:n])
fmt.Println("nn==========收到消息============")
fmt.Printf("%v", msg)
fmt.Println("===========收到消息===========n")
fmt.Print(NAME + " : ")
// buf = nil
}
}()
// fmt.Print(NAME + "first: ")
//发送信息服务
for {
var msg string
// fmt.Scanf("%s", &msg)
reader := bufio.NewReader(os.Stdin)
msg, _ = reader.ReadString('n')
msg = strings.Trim(msg, "rn")
// setname(conn, msg)
if msg == "exit" {
fmt.Println("正常退出")
return
} else {
// fmt.Println("发送信息" + msg)
conn.Write([]byte(msg))
}
fmt.Print(NAME + " : ")
if isout := strings.Split(msg, "$"); len(isout) == 3 {
fmt.Printf("len(isout): %vn", len(isout))
NAME = setname(conn, msg)
continue
}
// fmt.Print(name + "send: ")
}
}
//第一次输入用户名
func firstSetName(name string, conn net.Conn) error {
_, err := conn.Write([]byte("firstname" + name))
if err != nil {
fmt.Println(err.Error())
return err
}
fmt.Println("初始化" + name + "成功")
return nil
}
//设置and修改用户名
func setname(conn net.Conn, msg string) string {
tempmsg := strings.Split(msg, "$")
if len(tempmsg) == 3 {
name := tempmsg[2]
return name
} else {
return conn.LocalAddr().String()
}
}



