go语言之TCP编程

服务端

package main

import (
	"fmt"
	"net"
)

func process(conn net.Conn){
	defer conn.Close()
	for{
		buf:=make([]byte,1024)
		fmt.Printf("服务器在等待客户端%s发送消息",conn.RemoteAddr().String())
		n,err:=conn.Read(buf)//从conn读取数据
		if err!=nil{
			fmt.Printf("客户端%s退出。。。",conn.RemoteAddr().String())
			return
		}
		fmt.Println(string(buf[:n]))
	}
}

func main(){
	fmt.Println("服务器开始监听")
	listen,err:=net.Listen("tcp","0.0.0.0:7077")
	if err!=nil{
		fmt.Println("Listen出错!",err)
		return
	}
	defer listen.Close()

	//循环等待客户端来连接
	for{
		fmt.Println("等待客户端来连接")
		conn,err:=listen.Accept()
		if err!=nil{
			fmt.Println("Accept出错",err)
		}else{
			fmt.Printf("Accept() suc con=%v 客户端 ip=%v\n", conn, conn.RemoteAddr().String())
		}
		//这里准备一个协程,为客户端服务
		go process(conn)
	}
}

客户端

package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
)

func main(){
	conn,err:=net.Dial("tcp","127.0.0.1:7077")
	if err!=nil{
		fmt.Println("Dial出错",err)
		return
	}
	//功能一:客户端可以发送单行数据,然后就退出
	reader := bufio.NewReader(os.Stdin) //os.Stdin 代表
	//从终端读取一行用户输入,并准备发送给服务器
	line, err := reader.ReadString('\n')
	if err != nil {
		fmt.Println("readString err=", err)
	}
	//再将 line 发送给 服务器
	n, err := conn.Write([]byte(line))
	if err != nil {
		fmt.Println("conn.Write err=", err)
	}
	fmt.Printf("客户端发送了 %d 字节的数据,并退出", n)

}

  

posted @ 2021-11-09 19:29  ☞@_@  阅读(45)  评论(0编辑  收藏  举报