1. 程式人生 > 其它 >go langTCP開啟示例

go langTCP開啟示例

技術標籤:go langgogolang網路通訊

在這裡插入圖片描述

傳送給伺服器要用 utf8 編碼方式

package main

import (
	"fmt"
	"net"
)

var serverChan chan bool = make(chan bool, 1)

func OpenTcpSever(ipAndPort string) {
	var err error
	var tcpListener net.Listener
	tcpListener, err = net.Listen("tcp", ipAndPort)
	if
err != nil { serverChan <- false return } defer tcpListener.Close() serverChan <- true for { con, err := tcpListener.Accept() if err != nil { continue } fmt.Println(con.RemoteAddr(), "客戶端連線成功.") go AccessClient(con) } } func AccessClient(con net.Conn) { buffer :=
make([]byte, 1024*2) var ( recNu int err error resSplice []byte ) defer con.Close() for { recNu, err = con.Read(buffer) if err != nil { break } fmt.Printf("服務端收到客戶端[%v]命令:%v\n", con.RemoteAddr(), string(buffer[:recNu])) resSplice = responStr(buffer[:recNu])
_, err = con.Write(resSplice) if err != nil { break } else { fmt.Printf("服務端回覆客戶端[%v]命令:%v\n", con.RemoteAddr(), string(resSplice)) } } fmt.Println(con.RemoteAddr(), "異常退出!") } func main() { //1. 開啟一個監聽服務端 serverIP := "127.0.0.1:5200" go OpenTcpSever(serverIP) //2. 檢驗服務是否開啟成功 serBl := <-serverChan if serBl { fmt.Println("監聽本地埠", serverIP, "成功,等待客戶端連線。") fmt.Println("輸入quite退出服務端...") var uIn string for { fmt.Scanln(&uIn) if uIn == "quite" { break } fmt.Println("輸入退出命令錯誤!!!請輸入quite退出服務端") } } else { fmt.Println("監聽本地埠", serverIP, "失敗!") } close(serverChan) } //根據伺服器接收到的命令去返回命令 func responStr(data []byte) []byte { recStr := string(data) resStr := "你說啥..." switch recStr { case "who are you?": resStr = "我是小兵張嘎" case "你的性別?": resStr = "你猜猜看啦" case "你會什麼": resStr = "我會講故事" case "你講個吧": recStr = "從前有座bai山,山上有座廟,du廟裡有個老和尚,老zhi和尚的dao身邊有三個和尚——頑皮zhuan的小和尚、貪吃的shu胖和尚和匆忙的瘦和尚,老和尚在給三個和尚講故事,故事是這樣的:一個和尚挑水吃,兩個和尚抬水吃,三個和尚沒水吃。" default: } return []byte(resStr) }