当前位置: 移动技术网 > IT编程>脚本编程>Go语言 > Go语言服务器开发之简易TCP客户端与服务端实现方法

Go语言服务器开发之简易TCP客户端与服务端实现方法

2017年12月08日  | 移动技术网IT编程  | 我要评论

本文实例讲述了go语言服务器开发之简易tcp客户端与服务端实现方法。分享给大家供大家参考。具体实现方法如下:

go语言具备强大的服务器开发支持,这里示范了最基础的服务器开发:通过tcp协议实现客户端与服务器的通讯。

一 服务端,为每个客户端新开一个goroutine

复制代码 代码如下:
func serverbase() { 
    fmt.println("starting the server...") 
    //create listener 
    listener, err := net.listen("tcp", "192.168.1.27:50000") 
    if err != nil { 
        fmt.println("error listening:", err.error()) 
        return 
    } 
 
    // listen and accept connections from clients: 
    for { 
        conn, err := listener.accept() 
        if err != nil { 
            fmt.println("error accepting:", err.error()) 
            return 
        } 
        //create a goroutine for each request. 
        go doserverstuff(conn) 
    } 

 
func doserverstuff(conn net.conn) { 
    fmt.println("new connection:", conn.localaddr()) 
    for { 
        buf := make([]byte, 1024) 
        length, err := conn.read(buf) 
        if err != nil { 
            fmt.println("error reading:", err.error()) 
            return 
        } 
 
        fmt.println("receive data from client:", string(buf[:length])) 
    } 
}

二 客户端 连接服务器,并发送数据

复制代码 代码如下:
func clientbase() { 
    //open connection: 
    conn, err := net.dial("tcp", "192.168.1.27:50000") 
    if err != nil { 
        fmt.println("error dial:", err.error()) 
        return 
    } 
 
    inputreader := bufio.newreader(os.stdin) 
    fmt.println("please input your name:") 
    clientname, _ := inputreader.readstring('\n') 
    inputclientname := strings.trim(clientname, "\n") 
 
    //send info to server until quit 
    for { 
        fmt.println("what do you send to the server? type q to quit.") 
        content, _ := inputreader.readstring('\n') 
        inputcontent := strings.trim(content, "\n") 
        if inputcontent == "q" { 
            return 
        } 
 
        _, err := conn.write([]byte(inputclientname + " says " + inputcontent)) 
        if err != nil { 
            fmt.println("error write:", err.error()) 
            return 
        } 
    } 
}

注:由于liteide不支持同时运行多个程序,所以需要在终端通过 go run 命令来同时运行服务端和(一个或多个)客户端,可观察到服务器对并发访问的支持。

希望本文所述对大家的go语言程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网