68-TCP通信

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33781658/article/details/84540029


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]))
	}
}


精彩


猜你喜欢

转载自blog.csdn.net/qq_33781658/article/details/84540029
68