日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

golang中net的tcp服務使用_Golang

作者:zhijie ? 更新時間: 2022-06-15 編程語言

服務端監聽端口 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(">>>>>>>>連接成功")

運行:?

原文鏈接:https://juejin.cn/post/7069580997234442247

欄目分類
最近更新