golang中net的tcp服務(wù)使用
服務(wù)端監(jiān)聽端口 listen()
方法:net.listen({監(jiān)聽類型},{監(jiān)聽的ip和端口})(conn, err){}
返回值:conn
是監(jiān)聽的對(duì)象,有獲取消息關(guān)閉監(jiān)聽等方法err
錯(cuò)誤信息,如果沒有錯(cuò)誤信息值為nil
import ("net" "fmt" ) conn,err := net.Lisien("tcp","127.0.0.1:8082") if err != nil{ ?fmt.Println("鏈接失敗,錯(cuò)誤信息為:"+err) }
接受客戶端的鏈接conn.Accept()
方法:conn.Accept() (newConn,err){}
返回值: newConn
客戶端的鏈接對(duì)象,類型為net.Conn
.存放了客戶端的鏈接信息,和與客戶端交互的方法.err
存放錯(cuò)誤,如果沒有錯(cuò)誤信息值為nil
注意點(diǎn): Accept()方法會(huì)阻塞,直到有鏈接過來
// ...上面的代碼... // 因?yàn)榭蛻舳说逆溄硬恢挂粋€(gè),需要一直監(jiān)聽,所以加個(gè)死循環(huán) for{ newConn,err := conn.Accept() if err != nil{ fmt.Println(err) } ? ?go handler(newConn) } ? // 客戶端連接后處理邏輯 func handler(newConn net.Conn){ ? ?// TODO }
接收客戶端發(fā)過來的數(shù)據(jù)newConn.Read()
方法:newConn.Read(msg)(num,err){}
返回值: num
數(shù)據(jù)內(nèi)容的長(zhǎng)度,單位字節(jié)err
錯(cuò)誤信息,如果沒有錯(cuò)誤信息值為nil
注意點(diǎn): 參數(shù)msg
是一個(gè)byte類型的切片,用來保存客戶端發(fā)送的數(shù)據(jù)。Read方法同樣會(huì)阻塞??!
// ...上上邊代碼補(bǔ)充... // 客戶端連接后處理邏輯 func handler(newConn net.Conn){ ? ?for{ ? ? ? ?// 新建一個(gè)位置用于存放客戶端數(shù)據(jù) ? ? ? ?msg := make([]byte,1024) ? ? ? ?num,err := newConn.Read(msg) ? ? ? ?if err != nil{ ? ? ? ? ? ?// 打印錯(cuò)誤信息 ? ? ? } ? ? ? ?fmt.Println("客戶端消息:"+msg) ? } ? ? }
獲取客戶端的IP地址newConn.RemoteAddr().String()
// 獲取ip地址,轉(zhuǎn)為之字符串 newConn.RemoteAddr().String()
向客戶端發(fā)送數(shù)據(jù)newConn.Write()
方法:newConn.Write(msg){}
參數(shù):msg
類型為[]byte
。
注意點(diǎn):需要把待發(fā)送的字符串轉(zhuǎn)為byte切片類型
newConn.Write([]bye("你好世界,helloworld1"))
關(guān)閉客戶端連接newConn.Close()
方法: newConn.Close(){}
在客戶端連接的返回的對(duì)象上調(diào)用Close()
方法即可
newConn.Close()
客戶端連接tpc服務(wù)端
連接服務(wù)端net.Dial()
方法: net.Dial({連接類型},{地址})(conn,err){}
放回值: conn
連接成功后的連接對(duì)象,err
連接出錯(cuò)時(shí)的錯(cuò)誤信息,如果沒有錯(cuò)誤信息,返回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 錯(cuò)誤:",err) ? ?return nil } if(conn == nil){ ? ?fmt.Println(">>>>>>>>連接錯(cuò)誤") ? ?return } fmt.Println(">>>>>>>>連接成功")
運(yùn)行:
到此這篇關(guān)于golang中net的tcp服務(wù)使用的文章就介紹到這了,更多相關(guān)net的tcp服務(wù)使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- golang之tcp自動(dòng)重連實(shí)現(xiàn)方法
- 利用Golang實(shí)現(xiàn)TCP連接的雙向拷貝詳解
- golang 實(shí)現(xiàn)tcp轉(zhuǎn)發(fā)代理的方法
- Golang 實(shí)現(xiàn)Socket服務(wù)端和客戶端使用TCP協(xié)議通訊
- Golang通過包長(zhǎng)協(xié)議處理TCP粘包的問題解決
- Golang?編寫Tcp服務(wù)器的解決方案
- golang實(shí)現(xiàn)簡(jiǎn)單的tcp數(shù)據(jù)傳輸
- Golang實(shí)現(xiàn)自己的Redis(TCP篇)實(shí)例探究
- Golang TCP網(wǎng)絡(luò)編程的具體實(shí)現(xiàn)
相關(guān)文章
goland遠(yuǎn)程調(diào)試k8s上容器的實(shí)現(xiàn)
本文主要介紹了goland遠(yuǎn)程調(diào)試k8s上容器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02go語言題解LeetCode989數(shù)組形式的整數(shù)加法
這篇文章主要為大家介紹了go語言題解LeetCode989數(shù)組形式的整數(shù)加法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Go類型斷言提取測(cè)試接口值動(dòng)態(tài)類型及靜態(tài)轉(zhuǎn)換確保類型接口編譯安全
這篇文章主要為大家介紹了Go類型斷言提取測(cè)試接口值動(dòng)態(tài)類型及靜態(tài)轉(zhuǎn)換確保類型實(shí)現(xiàn)特定接口的編譯時(shí)安全性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10Golang如何實(shí)現(xiàn)任意進(jìn)制轉(zhuǎn)換的方法示例
進(jìn)制轉(zhuǎn)換是人們利用符號(hào)來計(jì)數(shù)的方法,進(jìn)制轉(zhuǎn)換由一組數(shù)碼符號(hào)和兩個(gè)基本因素“基數(shù)”與“位權(quán)”構(gòu)成,這篇文章主要給大家介紹了關(guān)于Golang如何實(shí)現(xiàn)10進(jìn)制轉(zhuǎn)換62進(jìn)制的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí)學(xué)習(xí),下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09