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)