服務端:message_server.go
package main
import (
"container/list"
"encoding/json"
"fmt"
json "go-json" //go-******json
"net"
"sync"
"time"
)type client_message struct
type all_message struct
type message struct
var ip_port string = ":5555"
var message_map map[int]all_message = make(map[int]all_message)
func main()
}func connection(con net.conn)
if n == 0
mes, err := json.newjson(buf[:n])
if err != nil else
c_message := convert_json(mes)
switch
num := len(list)
con.write(byte(fmt.sprint(num)))
n, e := con.read(buf)
checkerror("get", e)
if string(buf[:n]) == "get_len_ok" else }}
} }}func put_message(c_message client_message)
if message_map[c_message.receiver].list == nil
} m := message_map[c_message.receiver]
m.lock.lock()
m.list.pushfront(string)
m.lock.unlock()
}func get_message(num int) byte
l := message_map[num]
l.lock.lock()
x := l.list.len()
for i := 0; i < x; i++
l.lock.unlock()
return message_list
}func checkerror(pos string, e error)
}func convert_json(mes *json.json) client_message
return m
}
客戶端:send_message.go
客戶端我分為兩個小部分,乙個是專門自動接收的,乙個是用的發訊息的,我想兩者同事進行,但不在gui下面輸入輸出我不知道怎麼解決,所以就搞成兩部分.
package main
import (
//"encoding/json"
"fmt"
json "go-json"
"net"
"strconv"
t "time"
)type client_message struct
type message struct
var sender int = 123456789
var receiver int = 1597805565 //qq
func main()
/* 這個登出部分是用來傳送訊息的,編譯的時候要登出掉這面乙個for迴圈.
for
} */
for
t.sleep(3e9) }}
func send_message(con net.conn, str string) byte `, sender, receiver, "put", str))
if 0 < len(mes) && len(mes) <= 2048 else
}func get_message(con net.conn) error `, sender, receiver, "get", ""))
_, e := con.write(mes)
if e != nil
s := string(checkresponse(con))
if s == "ok"
} }return nil
}func checkresponse(con net.conn) byte
return buf[:n]
}
客戶端截圖:
服務端截圖:
go語言實現聊天伺服器 多人聊天)
用go語言實現乙個server作中轉 訊息,多個客戶端聊天 1 伺服器開啟,等待來自客戶端的連線,把每乙個客戶端儲存在map中 2 客戶端連線伺服器,給自己取乙個別名,儲存在伺服器 4 客戶端發訊息,伺服器解析協議,給每乙個客戶端 5 客戶端下線 server server project main...
最簡單的C語言實現大數相乘
前言 實現大數相乘比相加要難一點 但是仔細分析會發現很多共同之處 分析 1.由數學歸納法會發現用一般的兩數相乘方法計算 每計算一次都能夠確定最終結果的一位數字 2.比如說 456 123 下面我用草稿描述 字醜請見諒 3.第一步我們可以確定個位 第二步可以確定十位 第三步是百位 以此類推 第n步由n...
GO語言實現簡單的目錄複製功能
建立乙個獨立的 goroutine 遍歷檔案,主程序負責寫入資料。程式會複製空目錄,也可以設定只複製以 xx 結尾的檔案。嚴格來說這不是複製檔案,而是寫入新檔案。因為這個程式是建立新檔案,然後寫入複製資料的。我們一般的 copy 命令是不會修改檔案的 ctime change time 狀態的。如下...