伺服器
伺服器就是有乙個持續獲取連線的動作,for迴圈實現,for迴圈開啟處理訊息的協程,處理訊息的函式,接收訊息並將訊息寫入緩衝通道。還有乙個廣播函式,用來將收到的訊息發給所有與伺服器連線的位址。
package main
import (
"net"
"os"
)func main()
func start(p string)
listener,err:= net.listentcp("tcp",tcpaddr) //布置監聽
if err != nil
conns := make(map[string]net.conn) //連線池,用來儲存所有人的資料
message := make(chan string,10) //緩衝訊息通道
//時刻監聽
forconns[conn.remoteaddr().string()] = conn //將新連線存進map,鍵是他的遠端位址
go handlermessage(conn,message) //啟動接收資訊協程
}}//廣播到所有conn 除了發出訊息的
func broadcast(conns map[string]net.conn,mess chan int)
v.write(byte("broadcast"))}}
}//處理收的的訊息
func handlermessage(conn net.conn,mess chan string)
mess<-string(buf[0:length]) //接收到的資訊寫入通道
fmt.println(string(buf[0:length]))
}}
客戶端客戶端有乙個開始的函式,用來連線伺服器,開啟協程,讀取伺服器發來的訊息。傳送訊息的函式,接收輸入訊息後用conn.write()傳送訊息。
package main
import (
"fmt"
"log"
"net"
"os"
)func main()
func start(addr string)
conn, err := net.dialtcp("tcp", nil, tcpaddr) //連線伺服器
if err != nil
//啟動傳送訊息協程
go sendmessage(conn)
buf := make(byte, 1024)
for
fmt.println(string(buf[0:length]))
}}func sendmessage(conn net.conn) }}
}
go語言實現聊天伺服器 多人聊天)
用go語言實現乙個server作中轉 訊息,多個客戶端聊天 1 伺服器開啟,等待來自客戶端的連線,把每乙個客戶端儲存在map中 2 客戶端連線伺服器,給自己取乙個別名,儲存在伺服器 4 客戶端發訊息,伺服器解析協議,給每乙個客戶端 5 客戶端下線 server server project main...
go語言學習筆記
type info struct func main fmt.println info1 data,json.marshal info1 fmt.println string data 輸出 這裡要特別注意的是 json 冒號後面和雙引號之間千萬不要有空格!被坑慘了 go語言 import的包的前面...
Go語言 學習筆記
import 下劃線 如 import hello imp 的作用 當匯入乙個包時,該包下的檔案裡所有init 函式都會被執行,然而,有些時候我們並不需要把整個包都匯入進來,僅僅是是希望它執行init 函式而已。這個時候就可以使用 import 引用該包。即使用 import 包路徑 只是引用該包,...