golang實現簡易多人聊天伺服器

2021-10-10 15:29:03 字數 1543 閱讀 8446

伺服器端server.go**如下:

package main

import (

"fmt"

"net"

)var connmap map[string]*net.tcpconn //客戶端ip到conn(接收連線)的對映

func checkerr(err error) int

fmt.println("發生錯誤")

return -1

} return -1

}func say(tcpconn *net.tcpconn) else

flag := checkerr(err)

if flag == 0

for _, conn := range connmap

conn.write(data[:total])

} }}func main()

}

客戶端**client.go**如下:

package main

import (

"fmt"

"net"

"os"

"bufio" //緩衝包

)var ch chan int = make(chan int)

func reader(conn *net.tcpconn)

fmt.println(string(buff[0:j])) }}

func main()

service := os.args[1] //該引數儲存的是從命令列獲取的ip位址及埠號

tcpadd, _ := net.resolvetcpaddr("tcp", service)

conn, err := net.dialtcp("tcp", nil, tcpadd) //請求與tcpadd指定的tcp伺服器建立連線

if err != nil

defer conn.close()

go reader(conn) //開闢另乙個go routine,接收其他客戶端發來的訊息

inputreader := bufio.newreader(os.stdin) //從stdin讀取資料

fmt.println("請輸入暱稱:")

nickname, err := inputreader.readstring('\n') //讀取一行資料,以字串形式返回

nickname = nickname[:len(nickname)-1] //將字串最後的換行符去掉

if err == nil

for

fmt.println("" + "說:" + msg)

b := byte("" + "說:" + msg)

conn.write(b) //將該訊息傳送給伺服器以**給其他客戶端

select

}}

該程式執行效果如下(開啟三個終端,同時執行伺服器和兩個客戶端進行除錯)

golang 簡易聊天

client.go package main import net fmt bufio echo codec time var quitsemaphore chan bool func main 傳送訊息 func sendmessage conn net.tcpconn lk b byte msg...

使用NIO實現多人聊天

基於nio實現多人模擬聊天視窗,首先要了解,nio元件,serversocketchannel socketchannel selector selectorkey。了解了他們各自作用以及關係,多人聊天系統很容易理解實現,這裡不在介紹,自行了解 初始化服務端servesocketchannel 連線...

FMS實現多人同時語音聊天

fms能否實現多人同時語音聊天?目前已實現一人說,n人聽 伺服器採用的是fms 實現 是利用 my netstream.publish streamtoplay record 這樣做的話,乙個人說是沒問題的 但是如果有另一人同時說的話,再次publish就會出錯 error 2044 unhandl...