Go語言學習筆記 聊天系統伺服器與客戶端

2021-09-29 03:46:04 字數 1431 閱讀 1776

伺服器

伺服器就是有乙個持續獲取連線的動作,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 包路徑 只是引用該包,...