1. 第一種方式
# 客戶端寫
//向服務器端寫數據
conn.Write(sendData1)
#服務端讀
headData := make([]byte, 8)
//ReadFull從r精確地讀取len(buf)字節數據填充進buf。
//函數返回寫入的字節數和錯誤(如果沒有讀取足夠的字節)。
//只有沒有讀取到字節時纔可能返回EOF;如果讀取了有但不夠的字節時遇到了EOF,
//函數會返回ErrUnexpectedEOF。 只有返回值err爲nil時,返回值n纔會等於len(buf)。
_, err := io.ReadFull(conn, headData)
2.第二種方式
#客戶端寫
conn.Write(data)
#服務端讀
//NewReader創建一個具有默認大小緩衝、從r讀取的*Reader。
reader := bufio.NewReader(conn)
var buf [1024]byte
//Read讀取數據寫入p。本方法返回寫入p的字節數。
//本方法一次調用最多會調用下層Reader接口一次Read方法,
//因此返回值n可能小於len(p)。讀取到達結尾時,
//返回值n將爲0而err將爲io.EOF。
n, err := reader.Read(buf[:])
3.第三種
#客戶端寫
_, err = conn.Write([]byte(trimInput))
#服務端讀
//創建一個切片
buf := make([]byte, 512)
n, err := conn.Read(buf)