人人妻人人澡人人爽人人精品av_精品乱码一区内射人妻无码_老司机午夜福利视频_精品成品国色天香摄像头_99精品福利国产在线导航_野花社区在线观看视频_大地资源在线影视播放_东北高大肥胖丰满熟女_金门瓶马车内剧烈运动

首頁(yè)>國(guó)內(nèi) > 正文

我們一起聊聊網(wǎng)絡(luò)編程

2023-08-10 10:19:21來(lái)源:今日頭條


(資料圖片)

引入【1】網(wǎng)絡(luò)編程:

把分布在不同地理區(qū)域的計(jì)算機(jī)與專(zhuān)門(mén)的外部設(shè)備用通信線路互連成一個(gè)規(guī)模大、功能強(qiáng)的網(wǎng)絡(luò)系統(tǒng),從而使眾多的計(jì)算機(jī)可以方便地互相傳遞信息、共享硬件、軟件、數(shù)據(jù)信息等資源。

設(shè)備之間在網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)的傳輸,發(fā)送/接收數(shù)據(jù)。

【2】通信兩個(gè)重要的要素:IP+PORT【3】設(shè)備之間進(jìn)行傳輸?shù)臅r(shí)候,必須遵照一定的規(guī)則 ---》通信協(xié)議:【4】TCP協(xié)議:可靠的

建立連接: 三次握手

釋放連接:四次揮手

【5】UDP協(xié)議:不可靠的基于TCP協(xié)議的網(wǎng)絡(luò)通信-創(chuàng)建客戶(hù)端【1】調(diào)用Dial函數(shù):(net包下)【2】代碼:
package mainimport ("fmt"http://所需的網(wǎng)絡(luò)編程全部都在net包下"net")func main()  {fmt.Println("客戶(hù)端啟動(dòng)...")//調(diào)用Dial函數(shù):參數(shù)需要指定tcp協(xié)議,需要指定服務(wù)器端的IP+PORTconn,err := net.Dial("tcp","101.201.48.167:80")if err != nil {fmt.Println("客戶(hù)端連接失敗:err:",err)return}fmt.Println("連接成功,conn:",conn)}
基于TCP協(xié)議的網(wǎng)絡(luò)通信-創(chuàng)建服務(wù)器端【1】進(jìn)行監(jiān)聽(tīng):(Listen函數(shù)在net包下)【2】代碼:
package mainimport ("fmt""net")func main()  {fmt.Println("服務(wù)端啟動(dòng)了...")listen,err := net.Listen("tcp","127.0.0.1:8888")if err != nil {fmt.Println("監(jiān)聽(tīng)失敗,err:",err)return }for{conn,err2 := listen.Accept()if err2 != nil {fmt.Println("客戶(hù)端的等待失敗,err2:",err2)}else {fmt.Printf("等待連接成功,con=%v,接收到的客戶(hù)端信息:%v \n",conn,conn.RemoteAddr().String())}}}
基于TCP協(xié)議的網(wǎng)絡(luò)通信-處理終端數(shù)據(jù)【1】客戶(hù)端發(fā)送數(shù)據(jù):
package mainimport ("fmt"http://所需的網(wǎng)絡(luò)編程全部都在net包下"net""bufio""os")func main()  {fmt.Println("客戶(hù)端啟動(dòng)...")//調(diào)用Dial函數(shù):參數(shù)需要指定tcp協(xié)議,需要指定服務(wù)器端的IP+PORTconn,err := net.Dial("tcp","127.0.0.1:8888")if err != nil {fmt.Println("客戶(hù)端連接失?。篹rr:",err)return}fmt.Println("連接成功,conn:",conn)//通過(guò)客戶(hù)端發(fā)送單行數(shù)據(jù),然后退出:reader := bufio.NewReader(os.Stdin)//從終端讀取一行用戶(hù)輸入的信息:str,err := reader.ReadString("\n")if err != nil {fmt.Println("終端輸入失敗,err",err)}//將str數(shù)據(jù)發(fā)送給服務(wù)器:n,err := conn.Write([]byte(str))if err != nil {fmt.Println("連接失敗,err:",err)}fmt.Printf("終端數(shù)據(jù)通過(guò)客戶(hù)端發(fā)送成功,一共發(fā)送了%d字節(jié)的數(shù)據(jù),并退出",n)}
【2】服務(wù)器端接收數(shù)據(jù):
package mainimport ("fmt""net")func process(conn net.Conn)  {//連接用完一定要關(guān)閉:defer conn.Close()for {//創(chuàng)建一個(gè)切片,準(zhǔn)備:將讀取的數(shù)據(jù)放入切片buf := make([]byte, 1024)//從conn連接中讀取數(shù)據(jù):n,err := conn.Read(buf)if err != nil {return}//將讀取內(nèi)容在服務(wù)器端輸出:fmt.Println(string(buf[0:n]))}}func main()  {fmt.Println("服務(wù)端啟動(dòng)了...")listen,err := net.Listen("tcp","127.0.0.1:8888")if err != nil {fmt.Println("監(jiān)聽(tīng)失敗,err:",err)return }for{conn,err2 := listen.Accept()if err2 != nil {fmt.Println("客戶(hù)端的等待失敗,err2:",err2)}else {fmt.Printf("等待連接成功,con=%v,接收到的客戶(hù)端信息:%v \n",conn,conn.RemoteAddr().String())}//準(zhǔn)備一個(gè)協(xié)程,協(xié)程處理客戶(hù)端服務(wù)請(qǐng)求://不同的客戶(hù)端的請(qǐng)求,連接conn不一樣的go process(conn)}}

關(guān)鍵詞:

相關(guān)新聞

Copyright 2015-2020   三好網(wǎng)  版權(quán)所有 聯(lián)系郵箱:435 22 [email protected]  備案號(hào): 京ICP備2022022245號(hào)-21