經過上面三篇文章,我們已經寫了乙個簡單的c/s框架,可以實現客戶端與服務端進行傳送訊息。但這是乙個單向通訊的。我們要想讓客戶端接收服務端發來的命令,並執行響應的動作,就需要寫成全雙工收發訊息。即客戶端也能接收服務端發來的指令。
下面我在客戶端定義乙個方法,用來接收服務端的訊息。
//接收服務端發來的訊息
func readmsg(conn net.conn)
客戶端完整**如下:
)//定義checkerror方法,避免寫太多到 if err!=nil
func checkerror(err error)
}func main()
//動態傳入服務端ip和埠號
service:=os.args[1]
tcpaddr,err:=net.resolvetcpaddr("tcp4",service)
checkerror(err)
conn,err:=net.dialtcp("tcp",nil,tcpaddr)
checkerror(err)
ch:=make(chan int,100)
ticker := time.newticker(time.second)
defer ticker.stop()
for }}
//客戶端訊息處理
func clientmsghandler(conn net.conn,ch chan int)
func getsession() string
//接收服務端發來的訊息
func readmsg(conn net.conn)
//向服務端傳送訊息
func sendmsg(conn net.conn,msg string) "
//將資訊封包
smsg:=protocol.enpack(byte(words))
conn.write(smsg)
}在服務端,我們也做了響應的調整。定義乙個方法,專門向客戶端傳送訊息。
//服務端向客戶端傳送訊息
func writemsgtoclient(conn net.conn)
服務端完整**如下:
)//定義checkerror方法,避免寫太多到 if err!=nil
func checkerror(err error)
}//自定義log
func log(v... inte***ce{})
func main() }
//服務端訊息處理
func servermsghandler(conn net.conn)
//解包
fmt.println("client say:",string(tmpbuf))
msg:=tmpbuf
//向客戶端傳送訊息
go writemsgtoclient(conn)
beatch :=make(chan byte)
//心跳計時,預設30秒
go heartbeat(conn,beatch,30)
//檢測每次client是否有資料傳來
go heartchanhandler(msg,beatch) }}
//處理心跳,根據heartchanhandler判斷client是否在設定時間內發來資訊
func heartbeat(conn net.conn,heartchan chan byte,timeout int)
}//服務端向客戶端傳送訊息
func writemsgtoclient(conn net.conn)
//處理心跳channel
func heartchanhandler( n byte,beatch chan byte)
close(beatch)
}//從channell中讀取資料
func readchan(readchan chan byte)
}}現在配上一張圖,server端不斷給client端傳送訊息"wordpress",client不斷向server端匯報當前時間。
開始了解網路通訊
其實瀏覽器和應用程式都是客戶端,他們可以傳送syn包建立tcp連線。tcp連線的第乙個包,非常小的一種資料報。syn攻擊包括大量此類的包,由於這些包看上去來自實際不存在的站點,因此無法 有效進行處理。當兩台計算機在tcp連線上進行會話時,連線一定會首先被初始化。完成這項任務的包叫作syn。乙個syn...
從零開始了解Go語言開發
hello world 現在我們來建立第乙個go專案 hello。在我們桌面建立乙個hello目錄。package main 宣告 main 包,表明當前是乙個可執行程式 import fmt 匯入內建 fmt 包 func main 預設我們go build的可執行檔案都是當前作業系統可執行的檔案...
如何從零開始寫shell指令碼
如何從零開始寫shell指令碼 一 前言 為什麼我們需要使用shell 指令碼?難道我們之前學習的c c 不能夠完成shell指令碼語言的功能嗎,為什麼我們還需要學習shell指令碼?學習shell指令碼最大的好處是能夠輕易處理檔案與目錄之類的物件,如果同樣此類任務,利用c 或者c,則編寫程式很麻煩...