1. 程式人生 > 其它 >go socket程式設計通訊demo

go socket程式設計通訊demo

//啟動服務端監聽
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()
}