網站首頁 編程語言 正文
服務端監聽端口 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
相關推薦
- 2022-09-30 QT實現多文件拖拽獲取路徑的方法_C 語言
- 2022-07-01 python神經網絡Keras實現LSTM及其參數量詳解_python
- 2022-01-25 項目啟動的時候報Exception in thread main 錯誤解決方法
- 2022-03-03 gyp ERR! configure error. gyp ERR! stack Error: gy
- 2022-07-09 Android廣播實現App開機自啟動_Android
- 2022-12-03 C++實現重載矩陣的部分運算符_C 語言
- 2022-04-19 C#多線程系列之多線程鎖lock和Monitor_C#教程
- 2024-02-01 QueryWrapper、LambdaQueryWrapper、QueryChainWrapper、
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支