欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-21 10:32:59
本文实例讲述了go语言服务器开发之简易tcp客户端与服务端实现方法。分享给大家供大家参考。具体实现方法如下: go语言具备强大的服务器开发支持,这里示范了最基础的服务器开...

本文实例讲述了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语言程序设计有所帮助。