Go网络编程之echo

参考一些资料,自己写了一个简单的echo。
简单功能:从客户端终端输入字符串(不超过1024),通过tcp发送给服务器端;服务器端收到什么字符串,就马上将字符串按照原路返回;客户端收到字符串后,马上显示出来。
server.go

package main

import (
 "net"
 "fmt"
 "io"
)

const BUFF_SIZE = 1024
var buff = make([]byte,BUFF_SIZE)

// 接受一个TCPConn处理内容
func handleConn(tcpConn *net.TCPConn){
	if tcpConn == nil {
	  return
	}
	for {
	  n,err := tcpConn.Read(buff)
	  if err == io.EOF {
	    fmt.Printf("The RemoteAddr:%s is closed!\n",tcpConn.RemoteAddr().String())
	    return
	  }
	  handleError(err)
	  if n > 0 {
	    fmt.Printf("Read:%s",string(buff[:n]))
	  }
	  tcpConn.Write(buff)
	}
}

// 错误处理
func handleError(err error) {
	if err == nil {
	  return
	}
	fmt.Printf("error:%s\n",err.Error())
}

func main() {
	tcpAddr,err := net.ResolveTCPAddr("tcp","127.0.0.1:7000")
	handleError(err)
	tcpListener,err := net.ListenTCP("tcp",tcpAddr)  //监听
	handleError(err)
	defer tcpListener.Close()

	for {
	  tcpConn,err := tcpListener.AcceptTCP()
	  fmt.Printf("The client:%s has connected!\n",tcpConn.RemoteAddr().String())
	  handleError(err)
	  defer tcpConn.Close()
	  go handleConn(tcpConn)    //起一个goroutine处理
	}
}

client.go

package main

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

const BUFF_SIZE = 1024
var buff = make([]byte, BUFF_SIZE)

func handleMessage(tcpConn *net.TCPConn, line string) {
	//line += "\n"
	content := []byte(line)
	tcpConn.Write(content)

	reader := bufio.NewReader(tcpConn)
	message, err := reader.ReadString('\n')
	if err != nil {
		return
	}
	fmt.Println("recv message:",string(message))
}

func main() {
	fmt.Println("begin dial...")
	var tcpAddr *net.TCPAddr
	tcpAddr, _ = net.ResolveTCPAddr("tcp", "127.0.0.1:7000")
    tcpConn, err := net.DialTCP("tcp", nil, tcpAddr)
	if err != nil {
		fmt.Println("dial error:", err)
		return
	}
	defer tcpConn.Close()
	fmt.Println("dial ok")

	for {
		r := bufio.NewReader(os.Stdin)
		line, err := r.ReadString('\n')
		if err == nil {
			go handleMessage(tcpConn, line)
		}
	}
}

运行效果:
服务器端:
在这里插入图片描述
客户端:
在这里插入图片描述
参考:用golang编写简单的Echo Server(该文章中的echo服务器,只是将从客户端收到的字符串显示在终端中,并未将收到的字符串原路返回)

Golang实现简单tcp服务器02 – 实现echo服务器/客户端(该文章中,实现了收和发,但是并未从终端输入)

异步echo的实现

Go语言TCP Socket编程(内容较为详实,而且demo在github上,对学习go的网络编程帮助较大,代码点击此处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值