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语言框架