Go語(yǔ)言服務(wù)器開發(fā)之簡(jiǎn)易TCP客戶端與服務(wù)端實(shí)現(xiàn)方法
本文實(shí)例講述了Go語(yǔ)言服務(wù)器開發(fā)之簡(jiǎn)易TCP客戶端與服務(wù)端實(shí)現(xiàn)方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
Go語(yǔ)言具備強(qiáng)大的服務(wù)器開發(fā)支持,這里示范了最基礎(chǔ)的服務(wù)器開發(fā):通過(guò)TCP協(xié)議實(shí)現(xiàn)客戶端與服務(wù)器的通訊。
一 服務(wù)端,為每個(gè)客戶端新開一個(gè)goroutine
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]))
}
}
二 客戶端 連接服務(wù)器,并發(fā)送數(shù)據(jù)
//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不支持同時(shí)運(yùn)行多個(gè)程序,所以需要在終端通過(guò) go run 命令來(lái)同時(shí)運(yùn)行服務(wù)端和(一個(gè)或多個(gè))客戶端,可觀察到服務(wù)器對(duì)并發(fā)訪問(wèn)的支持。
希望本文所述對(duì)大家的Go語(yǔ)言程序設(shè)計(jì)有所幫助。
相關(guān)文章
基于golang時(shí)間轉(zhuǎn)換的問(wèn)題
下面小編就為大家?guī)?lái)一篇基于golang時(shí)間轉(zhuǎn)換的問(wèn)題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08Go語(yǔ)言實(shí)現(xiàn)切片增刪改查的示例代碼
這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中切片的使用(增刪改查),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的可以參考一下2022-04-04手把手教你如何在Goland中創(chuàng)建和運(yùn)行項(xiàng)目
歡迎來(lái)到本指南!我們將手把手地教您在Goland中如何創(chuàng)建、配置并運(yùn)行項(xiàng)目,通過(guò)簡(jiǎn)單的步驟,您將迅速上手這款強(qiáng)大的集成開發(fā)環(huán)境(IDE),輕松實(shí)現(xiàn)您的編程夢(mèng)想,讓我們一起開啟這段精彩的旅程吧!2024-02-02go語(yǔ)言csrf庫(kù)使用實(shí)現(xiàn)原理示例解析
這篇文章主要為大家介紹了go語(yǔ)言csrf庫(kù)使用實(shí)現(xiàn)原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10golang?beego框架環(huán)境搭建過(guò)程
這篇文章主要為大家介紹了golang?beego框架環(huán)境搭建的過(guò)程腳本,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04