国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

Go語言服務器開發之簡易TCP客戶端與服務端實現方法

2020-04-01 19:21:49
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Go語言服務器開發之簡易TCP客戶端與服務端實現方法,實例分析了基于Go語言實現的簡易服務器的TCP客戶端與服務器端實現技巧,需要的朋友可以參考下
 

本文實例講述了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語言程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 揭西县| 锦屏县| 永新县| 南木林县| 嘉定区| 建瓯市| 赤城县| 通化市| 潜江市| 五峰| 婺源县| 平塘县| 东乡族自治县| 福建省| 荆门市| 北海市| 河北省| 九龙县| 广宁县| 株洲县| 无为县| 临猗县| 伊通| 白山市| 班戈县| 普兰店市| 祥云县| 翼城县| 扎鲁特旗| 五指山市| 青海省| 柞水县| 纳雍县| 汝城县| 社旗县| 鹿泉市| 友谊县| 丰城市| 娄底市| 晋宁县| 广汉市|