本文實例講述了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語言程序設計有所幫助。
您可能感興趣的文章:- go語言實現一個簡單的http客戶端抓取遠程url的方法
- go語言實現簡單http服務的方法
- Go語言的http/2服務器功能及客戶端使用
- go語言實現一個最簡單的http文件服務器實例
- go語言實現http服務端與客戶端的例子