Go语言基于Socket编写服务器端与客户端通信的实例
在golang中,网络协议已经被封装的非常完好了,想要写一个Socket的Server,我们并不用像其他语言那样需要为socket、bind、listen、receive等一系列操作头疼,只要使用Golang中自带的net包即可很方便的完成连接等操作~
在这里,给出一个最最基础的基于Socket的Server的写法:
packagemain
import(
"fmt"
"net"
"log"
"os"
)
funcmain(){
//建立socket,监听端口
netListen,err:=net.Listen("tcp","localhost:1024")
CheckError(err)
defernetListen.Close()
Log("Waitingforclients")
for{
conn,err:=netListen.Accept()
iferr!=nil{
continue
}
Log(conn.RemoteAddr().String(),"tcpconnectsuccess")
handleConnection(conn)
}
}
//处理连接
funchandleConnection(connnet.Conn){
buffer:=make([]byte,2048)
for{
n,err:=conn.Read(buffer)
iferr!=nil{
Log(conn.RemoteAddr().String(),"connectionerror:",err)
return
}
Log(conn.RemoteAddr().String(),"receivedatastring:\n",string(buffer[:n]))
}
}
funcLog(v...interface{}){
log.Println(v...)
}
funcCheckError(errerror){
iferr!=nil{
fmt.Fprintf(os.Stderr,"Fatalerror:%s",err.Error())
os.Exit(1)
}
}
唔,抛除Go语言里面10行代码有5行error的蛋疼之处,你可以看到,Server想要建立并接受一个Socket,其核心流程就是
netListen,err:=net.Listen("tcp","localhost:1024")
conn,err:=netListen.Accept()
n,err:=conn.Read(buffer)