使用GO语言进行TCP服务器搭建

283 阅读2分钟

TCP服务器搭建

TCP的优点在于应用简单、安全可靠,是众多企业选择通信协议的首选。作为新人学习者,那我们应该怎么使用GO语言搭建一个TCP服务器呢?

步骤:

  • 绑定IP和端口,建立侦听
  • 等待侦听的结果,得到一个新的连接
  • 与新连接进行通信

GO语言的API是十分强大的,现在我们需要使用GO语言官方net包中的Listen函数,它已经帮你做好了这一切

//network:选择网络类型,tcp/udp
//address:设定服务器地址,格式为IP:端口 
//Listener:返回一个侦听者对象,用于后续的步骤处理(它是一个接口,有Accept,Close,Addr三个方法)
func Listen(network, address string) (Listener, error) {
   var lc ListenConfig
   return lc.Listen(context.Background(), network, address)
}

在我们调用Accept方法后,就回返回建立好一个连接,我们就可以用来通信了。

举个栗子:

绑定IP和端口并启动侦听

listener,err:=net.Listen("TCP","127.0.0.1:8080")
if err !=nil{
    log.Panic("侦听失败",err)
}
defer listener.Close()   //延时关闭

监听等待新连接····

为了支持多个客户端,我们需要使用for循环和并发。

//通过循环等待一个新的连接
for{
connect,err:=listener.Accept()
if err !=nil{
  fmt.Println("连接失败",err)
      }
      //启动一个goroutine使新连接通信
  go  conn_com(connect)
  }

conn_com是我们自己写的具有通信功能的方法,我们在网络中Read消息,在Write回去。

func conn_com(c net.Conn){
defer c.Close
buf :=make([]byte,256)
for{
n,_:=c.Read(buf)
}

n,_=c.Write("本人不想回你消息")
}

如果我们是在类UNIX平台,我们可以借助系统的nc命令来测试服务器的服务情况。 比如: nc 127.0.0.1:8080 但是windows端就没有这个命令,但是,GO语言强大的官方net包中有一个Dial函数可以解决这个问题。 主要代码:

//建立连接
conn,_:=Dial("tcp",127.0.0.1:8080)
defer c.Close()

本文正在参加技术专题18期-聊聊Go语言框架