go簡單聊天室的搭建

2021-10-02 15:52:44 字數 2530 閱讀 3185

與一對一的設計思路類似,就是加了個執行緒的操作。

1,伺服器端宣告乙個map,並開啟監聽埠;

2,客戶端開啟監聽埠,同時連入伺服器端;

3,在客戶端上給自己起乙個暱稱,並輸出,同時啟動乙個執行緒;

4,伺服器端接收乙個暱稱,並存入map;

5,宣告乙個空的字串,並寫入要**的訊息;

6,伺服器端解析傳送的訊息(msg_str[0]的值):

nick:使該客戶端加入聊天室並廣播連上伺服器端的所有其他客戶端;

say:廣播客戶端發出的訊息;

quit:使該客戶端退出,斷開與伺服器端的連線,並將退出訊息廣播給其他連上伺服器端的所有其他客戶端;

// one sever to more client chat room

//this is chat sever

package main

import

("fmt"

"net"

"strings"

)var connmap map

[string

]net.conn =

make

(map

[string

]net.conn)

//宣告乙個集合

//connmap := make(map[string]net.conn)

func

main()

defer listen_socket.

close()

fmt.

println

("server is wating ...."

)for

fmt.

println

(conn.

remoteaddr()

,"connect successed")go

handle

(conn)

//建立執行緒}}

func

handle

(conn net.conn)

//解析協議

msg_str := strings.

split

(string

(data[

0:msg_read]),

"|")

//將從客戶端收到的位元組流分段儲存到msg_str這個陣列中

switch msg_str[0]

} connmap[msg_str[1]

]= conn

case

"say"

://**訊息

for k, v :=

range connmap

}case

"quit"

://退出

for k, v :=

range connmap

}delete

(connmap, msg_str[1]

)//退出聊天室}}

}

// one sever to more client chat room

//this is chat client

package main

import

("fmt"

"net"

)var nick string=""

//宣告聊天室的暱稱

func

main()

defer conn.

close()

fmt.

println

("client connect server successed \n"

)//給自己取乙個聊天室的暱稱

fmt.

printf

("make a nickname:"

) fmt.

scanf

("%s"

,&nick)

//輸入暱稱

fmt.

println

("hello : "

, nick)

//客戶端輸出

conn.

write([

]byte

("nick|"

+ nick)

)//將資訊傳送給伺服器端

gohandle

(conn)

//建立執行緒

var msg string

for}

}func

handle

(conn net.conn)

fmt.

println

(string

(data[

0:msg_read]))

//把位元組流轉換成字串

}}

編譯執行服務端與客戶端

go run server.

gogo run client.

go

執行結果展示

go簡單聊天室的搭建

與一對一的設計思路類似,就是加了個執行緒的操作。1,伺服器端宣告乙個map,並開啟監聽埠 2,客戶端開啟監聽埠,同時連入伺服器端 3,在客戶端上給自己起乙個暱稱,並輸出,同時啟動乙個執行緒 4,伺服器端接收乙個暱稱,並存入map 5,宣告乙個空的字串,並寫入要 的訊息 6,伺服器端解析傳送的訊息 m...

go 簡單聊天室

package main import fmt net strings time 建立使用者結構體型別 type cline struct var onlinemap map string cline 建立全域性 channel 傳遞使用者訊息 var message make chan strin...

簡單聊天室

include include include include include include include include include include pthread t thread 2 void send msg void ip msg if connect sockfd,struct ...