1.網路程式設計:物理層->資料鏈路層->網路層->傳輸層->應用層
2.socket是應用層與tcp/ip協議族通訊的中間軟體抽象層
3.tcp程式設計:net包裡面,並且粘包的問題需要注意
服務端處理流程:
1.監聽埠
2.接收客戶端請求建立鏈結
3.建立goroutine處理鏈結
客戶端處理流程:
1.建立與服務端連線 2. 收發資料 3.關閉連線
案例:服務端:
func main()listen successdefer listen.close()
fmt.println("listen success")
//接收客戶端請求建立連線 accept
forfmt.println("收到客戶端連線進來=",conn.remoteaddr().string())
//接收資料
go func(_conn net.conn)
data := string(buf[:n])
fmt.println("receive data=",data)
//給客戶端發一條
_conn.write(byte("已經收到這條訊息"))
}}(conn)}}
//使用tcp工具傳送
//結果如下:
收到客戶端連線進來= 127.0.0.1:55559
receive data= 你哈啊
read err: read tcp 127.0.0.1:4567->127.0.0.1:55559: wsarecv: an existing connection was forcibly closed by the remote host.
客戶端:
func main()4.udp程式設計:換個函式defer _conn.close()
//2. 收發資料 accept
for i:=0;i<10;i++
//接收服務端資料
var buf [128]byte
n,err := _conn.read(buf[:])
if err != nil
fmt.println("server msg=",string(buf[:n]))
}}
Go基礎知識
1.func main 是程式開始執行的函式。main函式是每乙個可執行程式所必須包含的,一般來說都是在啟動後第乙個執行的函式 如果有init 函式則會先執行該函式 2.當識別符號 包括敞亮 變數 型別 函式名 結構欄位等 以乙個大寫字母開頭,那麼使用這種形式的識別符號的物件就可以被外部包的 所使用...
go基礎知識學習
最近沒有繼續部署elk系統和學習,是因為有專案進來了,自己需要學多一門語言go,學學吧,多學無害,但最怕學藝不精,最怕樣樣都懂點,樣樣都不深 package main import fmt func main 每個go應用程式都包含乙個名為main的包,func main 時候程式開始執行的函式,如...
go語言基礎知識
go指標func main go 空指標 當乙個指標被定義後沒有分配到任何變數時,它的值為 nil。nil 指標也稱為空指標。nil在概念上和其它語言的null none nil null一樣,都指代零值或空值。乙個指標變數通常縮寫為 ptr。檢視以下例項 例項package main import...