首頁 > 軟體

golang中net的tcp服務使用

2022-04-14 19:00:43

伺服器端監聽埠 listen()

方法:net.listen({監聽型別},{監聽的ip和埠})(conn, err){}

返回值:conn是監聽的物件,有獲取訊息關閉監聽等方法err錯誤資訊,如果沒有錯誤資訊值為nil

import ("net"
"fmt"
)
conn,err := net.Lisien("tcp","127.0.0.1:8082")
if err != nil{
  fmt.Println("連結失敗,錯誤資訊為:"+err)
}

接受使用者端的連結conn.Accept()

方法:conn.Accept() (newConn,err){} 返回值: newConn使用者端的連結物件,型別為net.Conn.存放了使用者端的連結資訊,和與使用者端互動的方法.err存放錯誤,如果沒有錯誤資訊值為nil 注意點: Accept()方法會阻塞,直到有連結過來

//  ...上面的程式碼...
// 因為使用者端的連結不止一個,需要一直監聽,所以加個死迴圈
for{
    newConn,err := conn.Accept()
    if err != nil{
        fmt.Println(err)
    }
    go handler(newConn)
}
​
// 使用者端連線後處理邏輯
func handler(newConn net.Conn){
    // TODO
}

接收使用者端發過來的資料newConn.Read()

方法:newConn.Read(msg)(num,err){}

返回值: num資料內容的長度,單位位元組err錯誤資訊,如果沒有錯誤資訊值為nil

注意點: 引數msg是一個byte型別的切片,用來儲存使用者端傳送的資料。Read方法同樣會阻塞!!

// ...上上邊程式碼補充...
// 使用者端連線後處理邏輯
func handler(newConn net.Conn){
    for{
        // 新建一個位置用於存放使用者端資料
        msg := make([]byte,1024)
        num,err := newConn.Read(msg)
        if err != nil{
            // 列印錯誤資訊
        }
        fmt.Println("使用者端訊息:"+msg)
    }
    
}

獲取使用者端的IP地址newConn.RemoteAddr().String()

// 獲取ip地址,轉為之字串
newConn.RemoteAddr().String()

向用戶端傳送資料newConn.Write()

方法:newConn.Write(msg){}

引數:msg型別為[]byte

注意點:需要把待傳送的字串轉為byte切片型別

newConn.Write([]bye("你好世界,helloworld1"))

關閉使用者端連線newConn.Close()

方法: newConn.Close(){}

在使用者端連線的返回的物件上呼叫Close()方法即可

newConn.Close()

使用者端連線tpc伺服器端

連線伺服器端net.Dial()

方法: net.Dial({連線型別},{地址})(conn,err){}

放回值: conn連線成功後的連線物件,err連線出錯時的錯誤資訊,如果沒有錯誤資訊,返回nil

// 建立tcp連線
package main
import (
    "net"
    "fmt"
)
Ip,Port := "127.0.0.1",8081
conn,err := net.Dial("tcp",fmt.Sprintf("%s:%d",Ip,Port))
if err != nil{
    fmt.Println("net.Dial 錯誤:",err)
    return nil
}
if(conn == nil){
    fmt.Println(">>>>>>>>連線錯誤")
    return
}
fmt.Println(">>>>>>>>連線成功")

執行: 

到此這篇關於golang中net的tcp服務使用的文章就介紹到這了,更多相關net的tcp服務使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com