5.2 TCP服務端
一個TCP服務端可以同時連接很多個客戶端,例如世界各地的用戶使用自己電腦上的瀏覽器訪問淘寶網,因為Go語言中創建多個goroutine實作并發非常方便和高效,所以我們可以每建立一次鏈接就創建一個goroutine去處理,
TCP服務端程式的處理流程:
監聽埠
接收客戶端請求建立鏈接
創建goroutine處理鏈接,
我們使用Go語言的net包實作的TCP服務端代碼如下:
func main() {
listen, err := net.Listen("tcp", "127.0.0.1:20000")
if err != nil {
fmt.Println("listen failed, err:", err)
return
}
for {
conn, err := listen.Accept() // 建立連接
if err != nil {
fmt.Println("accept failed, err:", err)
continue
}
go process(conn) // 啟動一個goroutine處理連接
}
}
將上面的代碼保存之后編譯成server或server.exe可執行檔案,
5.3 TCP客戶端
一個TCP客戶端進行TCP通信的流程如下:
1.建立與服務端的鏈接
2.進行資料收發
3.關閉鏈接
使用Go語言的net包實作的TCP客戶端代碼如下:
// tcp/client/main.go
// 客戶端
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:20000")
if err != nil {
fmt.Println("err :", err)
return
}
defer conn.Close() // 關閉連接
inputReader := bufio.NewReader(os.Stdin)
for {
input, _ := inputReader.ReadString('\n') // 讀取用戶輸入
inputInfo := strings.Trim(input, "\r\n")
if strings.ToUpper(inputInfo) == "Q" { // 如果輸入q就退出
return
}
_, err = conn.Write([]byte(inputInfo)) // 發送資料
if err != nil {
return
}
buf := [512]byte{}
n, err := conn.Read(buf[:])
if err != nil {
fmt.Println("recv failed, err:", err)
return
}
fmt.Println(string(buf[:n]))
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/277093.html
標籤:區塊鏈
上一篇:你的迷惑,Chia大佬來親自解開
