Golang Socket編程小實例

1.服務端監聽並處理接收信息

package main

import (
    "fmt"
    "io"
    "net"
)

func process(conn net.Conn){
    defer conn.Close()

    for {
        fmt.Println("服務器的等 待客戶端寫入……")
        readByte :=make([]byte,2048)
        // 注意這裏是將數據讀取到readByte byte數組中,讀取個數爲n,並不是上面的2048
        n,err :=conn.Read(readByte)
        if err==io.EOF{
            fmt.Println("客戶端關閉,服務器關閉")
            return
        }
        if err!=nil{
            fmt.Println("服務器的Reader err=",err)
            return
        }
        // 最終獲取到的數據, 取數時要注意,是0~n 個不是2048,因爲最終讀取到的是n
        readStr :=string(readByte[:n])
        fmt.Println("服務器端讀取到數據",readStr)
    }
}

func main(){
    fmt.Println("服務器端開始監聽^……")
    // 服務端監聽 8090
    listen,err :=net.Listen("tcp","127.0.0.1:8090")
    if err!=nil{
        fmt.Println("監聽127.0.0.1:8090出錯")
return } defer listen.Close()
for{ fmt.Println("等待客戶端·連接……") conn,err :=listen.Accept() if err!=nil{ fmt.Println("接收出錯",err) } fmt.Println("客戶端連接成功……") fmt.Println(conn) go process(conn) } }

2.客戶端連接服務端併發送信息

package main

import (
    "fmt"
    "net"
)

func main()  {
    // 建立客戶端連接
    conn,err :=net.Dial("tcp","127.0.0.1:8090")
    if err !=nil{
        fmt.Println("建立連接120.0.0.1:8090出錯",err)
        return    // 注意 如果連接失敗,這裏要失敗
    }
    fmt.Println("連接120.0.0.1:8090成功!",err)
    defer conn.Close()
    // 發送信息
    whriteStr :="hello word,你好!"
    // 通過conn連接發送信息
    n,err :=conn.Write([]byte(whriteStr))
    if err!=nil{
        fmt.Println("conn whrite err=",err)
    }
    fmt.Println("客戶端發送了",n,"個字節並退出")

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章