client.go
package main
import (
"bufio"
"fmt"
"net"
"os"
)
//让用户能后续输入数据
func scandata(conn net.Conn) {
//for{}死循环保证用户不止能输入一次数据
for {
//使用bufio包结合缓冲区获取输入,可以使输入不受空格的影响
inputReader := bufio.NewReader(os.Stdin)
buf, _, _ := inputReader.ReadLine()
//当用户输入q,则停止输入
if string(buf) == "q" {
os.Exit(0)
}
//将客户端用户输入的数据写入conn,让服务端去读取
conn.Write(buf)
}
}
func main() {
//创建客户端,指定接口类型为tcp,IP地址为127.0.0.1,端口号为9909
conn, _ := net.Dial("tcp", "127.0.0.1:9909")
//设置每次从连接conn读取的字节数
buf := make([]byte, 1024)
//获取参数数组
args := os.Args
//获取第一个参数(即用户名,如go run clinet1.go 阿萨德,这里的args[1]就是阿萨德),再转换成字节数组,conn的读写数据只接受字节数组
conn.Write([]byte(args[1]))
//开启一个协程,让用户能后续输入数据
go scandata(conn)
//for{}死循环保证不止读取一次服务端写入的数据,只要服务端写入数据,客户端就能读取
for {
//conn.Read方法是一个同步阻塞的方法,就是说如果conn中没数据可读,下面的代码就不会执行
n, _ := conn.Read(buf)
//这里吧客户端读取到的数据转换为字节数组输出
fmt.Println(string(buf[:n]))
}
}
server1.go
pack