Go语言基于Socket编写服务器端与客户端通信的实例

343次阅读  |  发布于5年以前

在golang中,网络协议已经被封装的非常完好了,想要写一个Socket的Server,我们并不用像其他语言那样需要为socket、bind、listen、receive等一系列操作头疼,只要使用Golang中自带的net包即可很方便的完成连接等操作~
在这里,给出一个最最基础的基于Socket的Server的写法:

复制代码 代码如下:

package main
import (
"fmt"
"net"
"log"
"os"
)

func main() {

//建立socket,监听端口
netListen, err := net.Listen("tcp", "localhost:1024")
CheckError(err)
defer netListen.Close()

Log("Waiting for clients")    
for {    
    conn, err := netListen.Accept()    
    if err != nil {    
        continue    
    }    

    Log(conn.RemoteAddr().String(), " tcp connect success")    
    handleConnection(conn)    
}    

}
//处理连接
func handleConnection(conn net.Conn) {

buffer := make([]byte, 2048)    

for {    

    n, err := conn.Read(buffer)    

    if err != nil {    
        Log(conn.RemoteAddr().String(), " connection error: ", err)    
        return    
    }    


    Log(conn.RemoteAddr().String(), "receive data string:\n", string(buffer[:n]))    

}    

}
func Log(v ...interface{}) {
log.Println(v...)
}

func CheckError(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %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)

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8