golang中net的tcp服務(wù)使用
服務(wù)端監(jiān)聽(tīng)端口 listen()
方法:net.listen({監(jiān)聽(tīng)類型},{監(jiān)聽(tīng)的ip和端口})(conn, err){}
返回值:conn是監(jiān)聽(tīng)的對(duì)象,有獲取消息關(guān)閉監(jiān)聽(tīng)等方法err錯(cuò)誤信息,如果沒(méi)有錯(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ò)誤,如果沒(méi)有錯(cuò)誤信息值為nil 注意點(diǎn): Accept()方法會(huì)阻塞,直到有鏈接過(guò)來(lái)
// ...上面的代碼...
// 因?yàn)榭蛻舳说逆溄硬恢挂粋€(gè),需要一直監(jiān)聽(tīng),所以加個(gè)死循環(huán)
for{
newConn,err := conn.Accept()
if err != nil{
fmt.Println(err)
}
? ?go handler(newConn)
}
?
// 客戶端連接后處理邏輯
func handler(newConn net.Conn){
? ?// TODO
}
接收客戶端發(fā)過(guò)來(lái)的數(shù)據(jù)newConn.Read()
方法:newConn.Read(msg)(num,err){}
返回值: num數(shù)據(jù)內(nèi)容的長(zhǎng)度,單位字節(jié)err錯(cuò)誤信息,如果沒(méi)有錯(cuò)誤信息值為nil
注意點(diǎn): 參數(shù)msg是一個(gè)byte類型的切片,用來(lái)保存客戶端發(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ò)誤信息,如果沒(méi)有錯(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通過(guò)包長(zhǎng)協(xié)議處理TCP粘包的問(wèn)題解決
- Golang?編寫(xiě)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)文章
golang解析json數(shù)據(jù)的4種方法總結(jié)
在日常工作中每一名開(kāi)發(fā)者,不管是前端還是后端,都經(jīng)常使用 JSON,下面這篇文章主要給大家介紹了關(guān)于golang解析json數(shù)據(jù)的4種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
Ubuntu下安裝Go語(yǔ)言開(kāi)發(fā)環(huán)境及編輯器的相關(guān)配置
這篇文章主要介紹了Ubuntu下安裝Go語(yǔ)言開(kāi)發(fā)環(huán)境及編輯器的相關(guān)配置,編輯器方面介紹了包括Vim和Eclipse,需要的朋友可以參考下2016-02-02
解決Go語(yǔ)言中高頻次和高并發(fā)下隨機(jī)數(shù)重復(fù)的問(wèn)題
在Golang中,獲取隨機(jī)數(shù)的方法一般會(huì)介紹有兩種,一種是基于math/rand的偽隨機(jī),一種是基于crypto/rand的真隨機(jī),math/rand由于其偽隨機(jī)的原理,經(jīng)常會(huì)出現(xiàn)重復(fù)的隨機(jī)數(shù),導(dǎo)致在需要進(jìn)行隨機(jī)的業(yè)務(wù)出現(xiàn)較多的重復(fù)問(wèn)題,所以本文給大家介紹了較好的解放方案2023-12-12
Go語(yǔ)言轉(zhuǎn)換所有字符串為大寫(xiě)或者小寫(xiě)的方法
這篇文章主要介紹了Go語(yǔ)言轉(zhuǎn)換所有字符串為大寫(xiě)或者小寫(xiě)的方法,實(shí)例分析了ToLower和ToUpper函數(shù)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02
go語(yǔ)言中反射機(jī)制的三種使用場(chǎng)景
本文主要介紹了go語(yǔ)言中反射機(jī)制的三種使用場(chǎng)景,包括JSON解析、ORM框架和接口適配,具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02
Go語(yǔ)言開(kāi)發(fā)快速學(xué)習(xí)CGO編程
這篇文章主要為大家介紹了Go語(yǔ)言開(kāi)發(fā)之快速學(xué)習(xí)CGO編程,看了本文你就會(huì)發(fā)現(xiàn)CGO編程其實(shí)沒(méi)有想象的那么難,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Go存儲(chǔ)基礎(chǔ)使用direct io方法實(shí)例
這篇文章主要介紹了Go存儲(chǔ)基礎(chǔ)之如何使用direct io方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12

