go socket程式設計通訊demo
阿新 • • 發佈:2022-04-11
//啟動服務端監聽
package main import ( "fmt" "net" "strings" ) func main() { //建立監聽 ip := "127.0.0.1" port := 8848 address := fmt.Sprintf("%s:%d",ip,port) listen, err := net.Listen("tcp", address) if err != nil { fmt.Println(err) return } //一直輪詢監聽 for{ fmt.Println("監聽中...") //接收資料 conn, err := listen.Accept() if err != nil { fmt.Println("accept",err) return } fmt.Println("連線成功") //啟動多個處理回撥 go handle(conn) } } func handle(conn net.Conn) { for{ //建立一個容器,用於接受讀取到的資料buf := make([]byte,1024) //cnt真正讀取客戶端發來的資料長度 fmt.Println("準備讀取傳送過來的資料") cnt, err := conn.Read(buf) if err != nil { fmt.Println("cnt err",err) return } //只輸出收到的長度 fmt.Println("長度:",cnt,"---資料:",string(buf[:cnt]))//將資料轉成大寫 upperData := strings.ToUpper(string(buf[:cnt])) write, err := conn.Write([]byte(upperData)) if err != nil { fmt.Println("write err",err) return } fmt.Println("長度:",write,"---資料:",upperData) } //關閉 conn.Close() }
2、客戶端程式碼
func main() { dial, err := net.Dial("tcp", ":8848") if err != nil { panic(err) } fmt.Println("connect success") //不斷重複傳送多次 for { //傳送資料 sendData := []byte("hello world") write, err := dial.Write(sendData) if err != nil { panic(err) } fmt.Println("send :",write,"--sendData:",string(sendData)) //接收伺服器返回 buf := make([]byte,1024) read, err := dial.Read(buf) if err != nil { panic(err) } time.Sleep(time.Second) fmt.Println("client receive,",read,"--receive data:",string(buf[:read])) } defer dial.Close() }