golang简单服务器
func main() {
//第一步:创建用于侦听的套接字
listener,err:=net.Listen("tcp","127.0.0.1:8080") //创建侦听器
if err!=nil{
fmt.Println("监听器创建失败:",err)
return
}
defer listener.Close()
fmt.Println("监听器创建成功...")
//第二步:创建用于通讯的套接字
conn,err:=listener.Accept() //阻塞
if err!=nil{
fmt.Println("套接字创建失败:",err)
return
}
defer conn.Close()
fmt.Println("连接成功...")
//第三步:通过死循环获取客户端发来的信息
buffer:=make([]byte,1024)
for{
n,err:=conn.Read(buffer) //从套接字中读取数据存储到切片中
if err!=nil{
fmt.Println("读取失败:",err)
return
}
fmt.Println("客户端发来了:",string(buffer[:n]))
//第四步:向客户端确认收到信息
conn.Write([]byte("收到...."))
}
}
简单客户端
func main() {
//第一步:向服务器拨号,创建用于通讯的套接字
conn,err:=net.Dial("tcp","127.0.0.1:8080") //给服务器拨号
if err!=nil{
fmt.Println("客户端拨号失败:",err)
return
}
defer conn.Close()
fmt.Println("拨号成功...")
//第二步:将键盘输入的数据写入套接字
buffer:=make([]byte,1024) //创建切片
go func() {
for{ //不断通过键盘输入
n,_:=os.Stdin.Read(buffer) //从键盘上读取,讲数据存放到buffer切片中
conn.Write(buffer[:n]) //将键盘输入的数据写入套接字
}
}()
//第三步:获取服务器返回的信息
for{
n,_:=conn.Read(buffer)
fmt.Println("服务器回复:",string(buffer[:n]))
}
}
我们再来改进一下
先是服务器
func main() {
listener, err := net.Listen("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("创建监听器失败...", err)
return
}
defer listener.Close()
fmt.Println("创建监听器成功...")
conn, err := listener.Accept()
if err != nil {
fmt.Println("创建套接字失败...", err)
return
}
defer conn.Close()
fmt.Println("连接成功...")
addr := conn.RemoteAddr()
arr := make([]byte, 1024)
for {
num, err := conn.Read(arr)
if err != nil {
fmt.Println("读取失败...")
break
}
str := string(arr[:num])
fmt.Println(addr, "发送了", str)
resString := "服务器已收到"
conn.Write([]byte(resString))
}
}
然后是客户端
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("拨号失败...")
return
}
defer conn.Close()
fmt.Println("拨号成功...")
arr := make([]byte, 1024)
buffer := make([]byte, 1024)
for {
num, err := os.Stdin.Read(arr)
if err != nil {
fmt.Println("读取失败...")
break
}
conn.Write(arr[:num])
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("读取服务器失败...")
break
}
fmt.Println(string(buffer[:n]))
}
}
精彩