socket代理又分為socket4和sockt5代理,其中socket4只能支持TCP協議,而socket5則同時支持TCP協議和UDP協議。
憑借整站使用成都h5網站建設的創新體驗、定制設計、設計團隊積累與透明式的服務過程,符合行業特點,專屬顧問根據企業產品,消費群體屬性,準確定位;設計師以目標客戶為中心,以突出品牌官網特性為宗旨,定制專屬網站建設設計方案。
Go 語言之所以叫 Go,是想表達這門語言的運行速度、開發速度、學習速度(develop)都像 gopher 一樣快。
gopher 是一種生活在加拿大的小動物,Go 語言的吉祥物就是這個小動物, 它的中文名叫作囊地鼠,他們最大的特點就是挖洞速度特別快。
Go 語言吉祥物是才華橫溢的插畫家 Renee French 設計的,她也是 golang 設計者之一 Rob Pike 的妻子。
三次握手:
1. 主動發起連接請求端(客戶端),發送 SYN 標志位,攜帶數據包、包號
2. 被動接收連接請求端(服務器),接收 SYN,回復 ACK,攜帶應答序列號。同時,發送SYN標志位,攜帶數據包、包號
3. 主動發起連接請求端(客戶端),接收SYN 標志位,回復 ACK。
被動端(服務器)接收 ACK —— 標志著 三次握手建立完成( Accept()/Dial() 返回 )
四次揮手:
1. 主動請求斷開連接端(客戶端), 發送 FIN標志,攜帶數據包
2. 被動接受斷開連接端(服務器), 發送 ACK標志,攜帶應答序列號。 —— 半關閉完成。
3. 被動接受斷開連接端(服務器), 發送 FIN標志,攜帶數據包
4. 主動請求斷開連接端(客戶端), 發送 最后一個 ACK標志,攜帶應答序列號。—— 發送完成,客戶端不會直接退出,等 2MSL時長。
等 2MSL待目的:確保服務器 收到最后一個ACK
滑動窗口:
通知對端本地存儲數據的 緩沖區容量。—— write 函數在對端 緩沖區滿時,有可能阻塞。
TCP狀態轉換:
1. 主動發起連接請求端:
CLOSED —— 發送SYN —— SYN_SENT(了解) —— 接收ACK、SYN,回發 ACK —— ESTABLISHED (數據通信)
2. 主動關閉連接請求端:
ESTABLISHED —— 發送FIN —— FIN_WAIT_1 —— 接收ACK —— FIN_WAIT_2 (半關閉、主動端)
—— 接收FIN、回復ACK —— TIME_WAIT (主動端) —— 等 2MSL 時長 —— CLOSED
3. 被動建立連接請求端:
CLOSED —— LISTEN —— 接收SYN、發送ACK、SYN —— SYN_RCVD —— 接收 ACK —— ESTABLISHED (數據通信)
4. 被動斷開連接請求端:
ESTABLISHED —— 接收 FIN、發送 ACK —— CLOSE_WAIT —— 發送 FIN —— LAST_ACK —— 接收ACK —— CLOSED
windows下查看TCP狀態轉換:
netstat -an | findstr? 端口號
Linux下查看TCP狀態轉換:
netstat -an | grep? 端口號
TCP和UDP對比:?
TCP: 面向連接的可靠的數據包傳遞。 針對不穩定的 網絡層,完全彌補。ACK
UDP:無連接不可靠的報文傳輸。 針對不穩定的 網絡層,完全不彌補。還原網絡真實狀態。
優點???????????????????????????????????????????????????????????? 缺點
TCP: 可靠、順序、穩定 ???????????????????????????????????? 系統資源消耗大,程序實現繁復、速度慢
UDP:系統資源消耗小,程序實現簡單、速度快 ???????????????????????? 不可靠、無序、不穩定
使用場景:
TCP:大文件、可靠數據傳輸。 對數據的 穩定性、準確性、一致性要求較高的場合。
UDP:應用于對數據時效性要求較高的場合。 網絡直播、電話會議、視頻直播、網絡游戲。
UDP-CS-Server實現流程:
1.? 創建 udp地址結構 ResolveUDPAddr(“協議”, “IP:port”) —— udpAddr 本質 struct{IP、port}
2.? 創建用于 數據通信的 socket ListenUDP(“協議”, udpAddr ) —— udpConn (socket)
3.? 從客戶端讀取數據,獲取對端的地址 udpConn.ReadFromUDP() —— 返回:n,clientAddr, err
4.? 發送數據包給 客戶端 udpConn.WriteToUDP("數據", clientAddr)
UDP-CS-Client實現流程:
1.? 創建用于通信的 socket。 net.Dial("udp", "服務器IP:port") —— udpConn (socket)
2.? 以后流程參見 TCP客戶端實現源碼。
UDPserver默認就支持并發!
------------------------------------
命令行參數: 在main函數啟動時,向整個程序傳參。 【重點】
語法: go run xxx.go ? argv1 argv2? argv3? argv4 。。。
xxx.exe:? 第 0 個參數。
argv1 :第 1 個參數。
argv2 :第 2 個參數。
argv3 :第 3 個參數。
argv4 :第 4 個參數。
使用: list := os.Args? 提取所有命令行參數。
獲取文件屬性函數:
os.stat(文件訪問絕對路徑) —— fileInfo 接口
fileInfo 包含 兩個接口。
Name() 獲取文件名。 不帶訪問路徑
Size() 獲取文件大小。
網絡文件傳輸 —— 發送端(客戶端)
1.? 獲取命令行參數,得到文件名(帶路徑)filePath list := os.Args
2.? 使用 os.stat() 獲取 文件名(不帶路徑)fileName
3.? 創建 用于數據傳輸的 socket? net.Dial("tcp", “服務器IP+port”) —— conn
4.? 發送文件名(不帶路徑)? 給接收端, conn.write()
5.? 讀取 接收端回發“ok”,判斷無誤。封裝函數 sendFile(filePath, conn) 發送文件內容
6.? 實現 sendFile(filePath,? conn)
1) 只讀打開文件 os.Open(filePath)
for {
2) 從文件中讀數據? f.Read(buf)
3) 將讀到的數據寫到socket中? conn.write(buf[:n])
4)判斷讀取文件的 結尾。 io.EOF. 跳出循環
}
網絡文件傳輸 —— 接收端(服務器)
1. 創建用于監聽的 socket net.Listen() —— listener
2. 借助listener 創建用于 通信的 socket listener.Accpet()? —— conn
3. 讀取 conn.read() 發送端的 文件名, 保存至本地。
4. 回發 “ok”應答 發送端。
5. 封裝函數,接收文件內容 recvFile(文件路徑)
1) f = os.Create(帶有路徑的文件名)
for {
2)從 socket中讀取發送端發送的 文件內容 。 conn.read(buf)
3)? 將讀到的數據 保存至本地文件 f.Write(buf[:n])
4)? 判斷 讀取conn 結束, 代表文件傳輸完成。 n == 0? break
}
分享題目:Go語言so go語言socket框架
新聞來源:http://vcdvsql.cn/article2/doichoc.html
成都網站建設公司_創新互聯,為您提供小程序開發、網站改版、靜態網站、Google、搜索引擎優化、微信公眾號
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯