go語言之TCP通訊
阿新 • • 發佈:2022-03-26
服務端
package main import ( "bufio" "fmt" "net" ) // 處理函式 func process(conn net.Conn) { defer conn.Close() // 關閉連線 for { reader := bufio.NewReader(conn) var buf [128]byte n, err := reader.Read(buf[:]) // 讀取資料 if err != nil { fmt.Println("read from client failed, err:", err) break } recvStr := string(buf[:n]) fmt.Println("收到client端發來的資料:", recvStr) conn.Write([]byte(recvStr)) // 傳送資料 } } func main() { listen, err := net.Listen("tcp", "127.0.0.1:9000") 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處理連線 } }
客戶端
package main import ( "bufio" "fmt" "net" "os" "strings" ) func main() { conn, err := net.Dial("tcp", "127.0.0.1:9000") 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])) } }