golang并发版本的tcp

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

}


发布了74 篇原创文章 · 获赞 2 · 访问量 6475

猜你喜欢

转载自blog.csdn.net/weixin_42067668/article/details/103494552