1聊天室伺服器端
package main2、聊天室客戶端import (
"fmt"
"net"
"strings"
"time"
)//定義的此結構體為全域性map的value值,包括每乙個使用者的姓名,ip位址和私人管道
type client struct
/*這個函式是將私人管道中的內容傳送給使用者,配合全域性管道message使用可以實現廣播的功能,
單獨使用可以實現私聊的功能*/
func writemsg2client(clinet client, conn net.conn)
}//這只是乙個封裝好用來統一(傳送資訊格式)的小函式,不用在意
func makemsg(name string, addr string, s string) string
//每乙個進入聊天室的使用者都將啟動乙個handleconn的go程來處理事件
func handleconn(conn net.conn)
//在這裡啟動子go程,功能上面已經提及,具體就是會寫資訊給自己連線的客戶端
go writemsg2client(client, conn)
onlinemap[addr] = client
//登入進來一切準備就緒後就給所有人廣播上線資訊啦
message <- makemsg(client.name, addr, "login")
//下面這三個變數服務於下面一些小功能
var haschat = make(chan bool)
var ifquit = make(chan bool)
var flag bool
//從這單獨開啟乙個go程來讀取使用者輸入的資訊
go func()
//改名功能的實現
if string(buf[:7]) == "rename|" else if string(buf[:n-1]) == "/who"
} else if string(buf[:2]) == "m|" && strings.count(string(buf[:n]), "|") == 2
}if flag
} else
haschat <- true
}}()
for
}}//這個函式用來將全域性message中的內容全部塞到私人管道c裡,實現上下線廣播和群聊的功能
func manager()
}}var message = make(chan string)
var onlinemap map[string]client = make(map[string]client)
//主函式
func main()
//每乙個連線進來的使用者都會被分配進入乙個子go程,用來處理上面我們提到的各種功能
go handleconn(conn)
}}/*備註
1、 listener, _ := net.listen("tcp", "127.0.0.1:9876")
監聽啟動
2、 go manager()開啟全域性message的go程,防止被阻塞,沒有訊息便被阻塞,有訊息便會被喚起,
訊息傳送完畢後重新等待訊息,有訊息變傳送沒訊息便阻塞等待(message 是乙個字串channel )。
func manager()
}}3、私人通道訊息處理
這個函式是將私人管道中的內容傳送給使用者,配合全域性管道message使用可以實現廣播的功能。
單獨使用可以實現私聊的功能(m|客戶端連線ip加埠|傳送訊息)(m|127.0.0.1:59700|hello)。
這個函式也是等待訊息,收到訊息後被喚醒執行,訊息執行完畢後等待新訊息,沒有阻塞,有就處理
func writemsg2client(clinet client, conn net.conn)
}*/
package mainimport (
"bufio"
"fmt"
"net"
"os"
"strings"
)func readfromserver(conn net.conn)
defer conn.close()
fmt.println("接收到訊息:", string(buf[:n]))
fmt.println("請輸入要傳送的訊息:")
}}func main()
defer conn.close()
go readfromserver(conn)
"請輸入要傳送的訊息:")
for
str = strings.trimspace(str)
"傳送前", , "展示")
"a", str, "b")
if str == "q"
conn.write(byte(str))
}}
asp 學習聊天室
了解了整個程式的核心部分,下面考慮如何儲存客戶資訊,這裡要用到乙個會話級的變數,即將客戶的nick儲存到session中,如 session nick request.form nick 最後我們要考慮的如何在asp檔案中處理多種事件 如客戶登陸介面,客戶聊天介面 由於客戶第一次請求.asp檔案時,...
mysql 聊天室 聊天室php mysql 六
聊天室php mysql 六 相應的 資料庫 phpmyadmin mysql dump 主機 localhost 3306 資料庫 study28 資料表的結構 chat user create table chat user userid varchar 20 not null,passwd v...
golang 實現乙個聊天室
最近看了一下go語言,就試著寫了乙個聊天室,練練手而已,但是對於我乙個搞php的來說,go語言對我啟發很大。客服端 package main import fmt net os 定義通道 var ch chan int make chan int 定義暱稱 var nickname string f...