server
package main
import (
"fmt"
"net"
"strings"
)
func hanledata(conn net.Conn) {
//一直预备读数据
defer conn.Close()
addr :=conn.RemoteAddr()
fmt.Println("连接上客户",addr)
buff := make([]byte,4096)
for{
n,err:=conn.Read(buff)
if err!=nil{
fmt.Println("conn.Read err",err)
}
fmt.Println("服务器收到数据",string(buff[:n]))
//返回数据
conn.Write([]byte(strings.ToUpper(string(buff[:n]))))
}
}
func main() {
//创建链接的套接字socket,监听地址和端口
listener,err :=net.Listen("tcp","127.0.0.1:8000")//指定服务器的ip地址和端口号
if err !=nil{
fmt.Print("尝试监听客户端失败")
return
}
defer listener.Close()
//说明accept是在监听
fmt.Println("等待客户端建立链接")
//并发版
for{
conn,err := listener.Accept()
//conn.Write([]byte("来自服务端的消息are you receive?"))
if err!=nil{
fmt.Printf("尝试链接客户端失败")
return
}
fmt.Println("与客户端链接成功")
//
//defer conn.Close()
go hanledata(conn)
}
//for{
// buff := make([]byte,4096)
// n,err:= conn.Read(buff)
// if err!=nil{
// fmt.Println("读取客户端的数据失败")
// return
// }
//
// fmt.Println("服务器读到数据:",string(buff[:n]))
//}
}
Client
package main
import (
"fmt"
"net"
"os"
)
func main() {
conn,err:=net.Dial("tcp","127.0.0.1:8000")
if err!=nil{
fmt.Println("net.Dial err",err)
return
}
defer conn.Close()
fmt.Println("net.Dial success")
go func(){
buff := make([]byte,4096)
//一直监听从键盘读数据
for{
n,err:=os.Stdin.Read(buff)
if err!=nil{
fmt.Println("stdin err",err)
continue
}
//将数据发送到服务端
conn.Write(buff[:n])
}
}()
//从服务器端接收数据
for{
buffer := make([]byte,4096)
n,err:=conn.Read(buffer)
if err!=nil{
fmt.Println("conn read err",err)
return
}
if n==0{
fmt.Println("检测到服务器端已经关闭,关闭链接")
}
fmt.Println(string(buffer[:n]))
}
}