go使用tcp实现两边通讯

描述:客户端可以接受服务端信息 & 写数据导服务端 服务端也一样

服务端代码

package main

import (
	"bufio"
	"fmt"
	"io"
	"net"
	"os"
	"strings"
)
func process(conn net.Conn){
	defer conn.Close()
	var buf[1024]byte
	reader:=bufio.NewReader(conn)
	for {
		n,err:=reader.Read(buf[:])
		if err  == io.EOF {
			break
		}
		if err != nil {
			return
		}
		recvStr:= string(buf[:n])
		fmt.Printf("收到客户端数据:%v\n",recvStr)
	}
}

//想客户端写写入数据
func write(conn net.Conn){
	defer conn.Close()
	reader:=bufio.NewReader(os.Stdin)
	for {
		text,_:=reader.ReadString('\n')
		text = strings.TrimSpace(text)
		conn.Write([]byte(text))
	}
}
func main(){
	listener,err:=net.Listen("tcp","0.0.0.0:8890")
	if err != nil {
		fmt.Println("start server is erros")
		return
	}
	fmt.Println("服务端启动成功...")
	fmt.Println("等待客户端的连接...")
	for {
		conn,_:= listener.Accept()
		go process(conn)
		go write(conn)
	}
	defer listener.Close()
}

客户端代码

package main

import (
	"bufio"
	"fmt"
	"io"
	"net"
	"os"
	"strings"
)
func read(conn net.Conn){
	defer conn.Close()
	var buf[1024]byte
	reader:=bufio.NewReader(conn)
	for {
		n,err:=reader.Read(buf[:])
		if err  == io.EOF {
			break
		}
		if err != nil {
			return
		}
		recvStr:= string(buf[:n])
		fmt.Printf("收到服务端数据为:%v\n",recvStr)
	}
}

func main(){
	conn,err:= net.Dial("tcp","127.0.0.1:8890")
	if err != nil {
		fmt.Println("is erro")
	}
	reader:= bufio.NewReader(os.Stdin)
	fmt.Printf("%v,\n","请写入内容")
	for {
		text,_:=reader.ReadString('\n')
		text = strings.TrimSpace(text)
		if text == "exit" {
			break
		}
		conn.Write([]byte(text))

		go read(conn)
	}
	conn.Close()
}

posted on 2022-12-10 20:34  孤灯引路人  阅读(38)  评论(0编辑  收藏  举报

导航