本文實(shí)例講述了Go語(yǔ)言服務(wù)器開(kāi)發(fā)之簡(jiǎn)易TCP客戶端與服務(wù)端實(shí)現(xiàn)方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
Go語(yǔ)言具備強(qiáng)大的服務(wù)器開(kāi)發(fā)支持,這里示范了最基礎(chǔ)的服務(wù)器開(kāi)發(fā):通過(guò)TCP協(xié)議實(shí)現(xiàn)客戶端與服務(wù)器的通訊。
一 服務(wù)端,為每個(gè)客戶端新開(kāi)一個(gè)goroutine
復(fù)制代碼 代碼如下:
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]))
}
}
二 客戶端 連接服務(wù)器,并發(fā)送數(shù)據(jù)
復(fù)制代碼 代碼如下:
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不支持同時(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ì)有所幫助。
您可能感興趣的文章:- go語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的http客戶端抓取遠(yuǎn)程url的方法
- go語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單http服務(wù)的方法
- Go語(yǔ)言的http/2服務(wù)器功能及客戶端使用
- go語(yǔ)言實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的http文件服務(wù)器實(shí)例
- go語(yǔ)言實(shí)現(xiàn)http服務(wù)端與客戶端的例子