mirror of https://gitee.com/godoos/godoos.git
7 changed files with 565 additions and 465 deletions
@ -1,224 +1,224 @@ |
|||||
package localchat |
package localchat |
||||
|
|
||||
import ( |
// import (
|
||||
"encoding/json" |
// "encoding/json"
|
||||
"fmt" |
// "fmt"
|
||||
"godo/libs" |
// "godo/libs"
|
||||
"io" |
// "io"
|
||||
"log" |
// "log"
|
||||
"net" |
// "net"
|
||||
"net/http" |
// "net/http"
|
||||
"os" |
// "os"
|
||||
"path/filepath" |
// "path/filepath"
|
||||
"time" |
// "time"
|
||||
) |
// )
|
||||
|
|
||||
const ( |
// const (
|
||||
fileSize = 1024 // 每个数据包的大小
|
// fileSize = 1024 // 每个数据包的大小
|
||||
) |
// )
|
||||
|
|
||||
type FileChunk struct { |
// type FileChunk struct {
|
||||
ChunkIndex int `json:"chunk_index"` |
// ChunkIndex int `json:"chunk_index"`
|
||||
Data []byte `json:"data"` |
// Data []byte `json:"data"`
|
||||
Checksum uint32 `json:"checksum"` |
// Checksum uint32 `json:"checksum"`
|
||||
Timestamp time.Time `json:"timestamp"` |
// Timestamp time.Time `json:"timestamp"`
|
||||
Filename string `json:"filename"` |
// Filename string `json:"filename"`
|
||||
} |
// }
|
||||
|
|
||||
// HandleMessage 处理 HTTP 请求
|
// // HandleMessage 处理 HTTP 请求
|
||||
func HandleMessage(w http.ResponseWriter, r *http.Request) { |
// func HandleMessage(w http.ResponseWriter, r *http.Request) {
|
||||
var msg UdpMessage |
// var msg UdpMessage
|
||||
decoder := json.NewDecoder(r.Body) |
// decoder := json.NewDecoder(r.Body)
|
||||
if err := decoder.Decode(&msg); err != nil { |
// if err := decoder.Decode(&msg); err != nil {
|
||||
http.Error(w, "Invalid request body", http.StatusBadRequest) |
// http.Error(w, "Invalid request body", http.StatusBadRequest)
|
||||
return |
// return
|
||||
} |
// }
|
||||
defer r.Body.Close() |
// defer r.Body.Close()
|
||||
err := SendToIP(msg) |
// err := SendToIP(msg)
|
||||
if err != nil { |
// if err != nil {
|
||||
http.Error(w, "Failed to send message", http.StatusInternalServerError) |
// http.Error(w, "Failed to send message", http.StatusInternalServerError)
|
||||
return |
// return
|
||||
} |
// }
|
||||
w.WriteHeader(http.StatusOK) |
// w.WriteHeader(http.StatusOK)
|
||||
fmt.Fprintln(w, "Text message send successfully") |
// fmt.Fprintln(w, "Text message send successfully")
|
||||
} |
// }
|
||||
|
|
||||
func HandlerFile(w http.ResponseWriter, r *http.Request) { |
// func HandlerFile(w http.ResponseWriter, r *http.Request) {
|
||||
// 初始化多播地址
|
// // 初始化多播地址
|
||||
var msg UdpMessage |
// var msg UdpMessage
|
||||
decoder := json.NewDecoder(r.Body) |
// decoder := json.NewDecoder(r.Body)
|
||||
if err := decoder.Decode(&msg); err != nil { |
// if err := decoder.Decode(&msg); err != nil {
|
||||
http.Error(w, "Invalid request body", http.StatusBadRequest) |
// http.Error(w, "Invalid request body", http.StatusBadRequest)
|
||||
return |
// return
|
||||
} |
// }
|
||||
defer r.Body.Close() |
// defer r.Body.Close()
|
||||
toIp := msg.IP |
// toIp := msg.IP
|
||||
preferredIP, err := GetLocalIP() |
// preferredIP, err := GetLocalIP()
|
||||
if err != nil { |
// if err != nil {
|
||||
http.Error(w, "Failed to get preferred IP", http.StatusInternalServerError) |
// http.Error(w, "Failed to get preferred IP", http.StatusInternalServerError)
|
||||
return |
// return
|
||||
} |
// }
|
||||
msg.IP = preferredIP |
// msg.IP = preferredIP
|
||||
msg.Type = "file" |
// msg.Type = "file"
|
||||
basePath, err := libs.GetOsDir() |
// basePath, err := libs.GetOsDir()
|
||||
if err != nil { |
// if err != nil {
|
||||
libs.HTTPError(w, http.StatusInternalServerError, err.Error()) |
// libs.HTTPError(w, http.StatusInternalServerError, err.Error())
|
||||
return |
// return
|
||||
} |
// }
|
||||
filePath := filepath.Join(basePath, msg.Message.(string)) |
// filePath := filepath.Join(basePath, msg.Message.(string))
|
||||
// 处理单个文件或整个文件夹
|
// // 处理单个文件或整个文件夹
|
||||
if fileInfo, err := os.Stat(filePath); err == nil { |
// if fileInfo, err := os.Stat(filePath); err == nil {
|
||||
if fileInfo.IsDir() { |
// if fileInfo.IsDir() {
|
||||
handleDirectory(filePath, toIp, msg) |
// handleDirectory(filePath, toIp, msg)
|
||||
} else { |
// } else {
|
||||
handleFile(filePath, toIp, msg) |
// handleFile(filePath, toIp, msg)
|
||||
} |
// }
|
||||
} else { |
// } else {
|
||||
http.Error(w, "Failed to stat path", http.StatusInternalServerError) |
// http.Error(w, "Failed to stat path", http.StatusInternalServerError)
|
||||
return |
// return
|
||||
} |
// }
|
||||
} |
// }
|
||||
|
|
||||
func handleFile(filePath string, toIp string, message UdpMessage) { |
// func handleFile(filePath string, toIp string, message UdpMessage) {
|
||||
// 打开文件
|
// // 打开文件
|
||||
file, err := os.Open(filePath) |
// file, err := os.Open(filePath)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Fatalf("Failed to open file: %v", err) |
// log.Fatalf("Failed to open file: %v", err)
|
||||
} |
// }
|
||||
defer file.Close() |
// defer file.Close()
|
||||
|
|
||||
// 获取文件大小
|
// // 获取文件大小
|
||||
fileInfo, err := file.Stat() |
// fileInfo, err := file.Stat()
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Fatalf("Failed to get file info: %v", err) |
// log.Fatalf("Failed to get file info: %v", err)
|
||||
} |
// }
|
||||
fileSize := fileInfo.Size() |
// fileSize := fileInfo.Size()
|
||||
|
|
||||
// 计算需要发送的数据包数量
|
// // 计算需要发送的数据包数量
|
||||
numChunks := (fileSize + fileSize - 1) / fileSize |
// numChunks := (fileSize + fileSize - 1) / fileSize
|
||||
|
|
||||
// 发送文件
|
// // 发送文件
|
||||
SendFile(file, int(numChunks), toIp, message) |
// SendFile(file, int(numChunks), toIp, message)
|
||||
} |
// }
|
||||
|
|
||||
func handleDirectory(dirPath string, toIp string, message UdpMessage) { |
// func handleDirectory(dirPath string, toIp string, message UdpMessage) {
|
||||
err := filepath.Walk(dirPath, func(path string, info os.FileInfo, err error) error { |
// err := filepath.Walk(dirPath, func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil { |
// if err != nil {
|
||||
return err |
// return err
|
||||
} |
// }
|
||||
if !info.IsDir() { |
// if !info.IsDir() {
|
||||
handleFile(path, toIp, message) |
// handleFile(path, toIp, message)
|
||||
} |
// }
|
||||
return nil |
// return nil
|
||||
}) |
// })
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Fatalf("Failed to walk directory: %v", err) |
// log.Fatalf("Failed to walk directory: %v", err)
|
||||
} |
// }
|
||||
} |
// }
|
||||
func SendFile(file *os.File, numChunks int, toIp string, message UdpMessage) { |
// func SendFile(file *os.File, numChunks int, toIp string, message UdpMessage) {
|
||||
// 逐块读取文件并发送
|
// // 逐块读取文件并发送
|
||||
for i := 0; i < numChunks; i++ { |
// for i := 0; i < numChunks; i++ {
|
||||
var chunkData [fileSize]byte |
// var chunkData [fileSize]byte
|
||||
n, err := file.Read(chunkData[:]) |
// n, err := file.Read(chunkData[:])
|
||||
if err != nil && err != io.EOF { |
// if err != nil && err != io.EOF {
|
||||
log.Fatalf("Failed to read file chunk: %v", err) |
// log.Fatalf("Failed to read file chunk: %v", err)
|
||||
} |
// }
|
||||
|
|
||||
// 创建文件块
|
// // 创建文件块
|
||||
chunk := FileChunk{ |
// chunk := FileChunk{
|
||||
ChunkIndex: i, |
// ChunkIndex: i,
|
||||
Data: chunkData[:n], |
// Data: chunkData[:n],
|
||||
Checksum: calculateChecksum(chunkData[:n]), |
// Checksum: calculateChecksum(chunkData[:n]),
|
||||
Timestamp: time.Now(), |
// Timestamp: time.Now(),
|
||||
Filename: filepath.Base(file.Name()), |
// Filename: filepath.Base(file.Name()),
|
||||
} |
// }
|
||||
message.Message = chunk |
// message.Message = chunk
|
||||
// 将文件块转换为 JSON 格式
|
// // 将文件块转换为 JSON 格式
|
||||
data, err := json.Marshal(message) |
// data, err := json.Marshal(message)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Fatalf("Failed to marshal chunk: %v", err) |
// log.Fatalf("Failed to marshal chunk: %v", err)
|
||||
} |
// }
|
||||
|
|
||||
// 发送文件块
|
// // 发送文件块
|
||||
addr, err := net.ResolveUDPAddr("udp4", toIp) |
// addr, err := net.ResolveUDPAddr("udp4", toIp)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Fatalf("Failed to resolve UDP address: %v", err) |
// log.Fatalf("Failed to resolve UDP address: %v", err)
|
||||
} |
// }
|
||||
|
|
||||
conn, err := net.DialUDP("udp4", nil, addr) |
// conn, err := net.DialUDP("udp4", nil, addr)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Fatalf("Failed to dial UDP address: %v", err) |
// log.Fatalf("Failed to dial UDP address: %v", err)
|
||||
} |
// }
|
||||
defer conn.Close() |
// defer conn.Close()
|
||||
|
|
||||
_, err = conn.Write(data) |
// _, err = conn.Write(data)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Failed to write data: %v", err) |
// log.Printf("Failed to write data: %v", err)
|
||||
} |
// }
|
||||
|
|
||||
fmt.Printf("发送文件块 %d 到 %s 成功\n", i, toIp) |
// fmt.Printf("发送文件块 %d 到 %s 成功\n", i, toIp)
|
||||
} |
// }
|
||||
} |
// }
|
||||
func RecieveFile(msg UdpMessage) { |
// func RecieveFile(msg UdpMessage) {
|
||||
chunk := msg.Message.(FileChunk) |
// chunk := msg.Message.(FileChunk)
|
||||
|
|
||||
// 验证校验和
|
// // 验证校验和
|
||||
calculatedChecksum := calculateChecksum(chunk.Data) |
// calculatedChecksum := calculateChecksum(chunk.Data)
|
||||
if calculatedChecksum != chunk.Checksum { |
// if calculatedChecksum != chunk.Checksum {
|
||||
fmt.Printf("Checksum mismatch for chunk %d from %s\n", chunk.ChunkIndex, msg.IP) |
// fmt.Printf("Checksum mismatch for chunk %d from %s\n", chunk.ChunkIndex, msg.IP)
|
||||
return |
// return
|
||||
} |
// }
|
||||
|
|
||||
baseDir, err := libs.GetOsDir() |
// baseDir, err := libs.GetOsDir()
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Failed to get OS directory: %v", err) |
// log.Printf("Failed to get OS directory: %v", err)
|
||||
return |
// return
|
||||
} |
// }
|
||||
|
|
||||
// 创建接收文件的目录
|
// // 创建接收文件的目录
|
||||
receiveDir := filepath.Join(baseDir, "C", "Users", "Reciv", time.Now().Format("2006-01-02")) |
// receiveDir := filepath.Join(baseDir, "C", "Users", "Reciv", time.Now().Format("2006-01-02"))
|
||||
if !libs.PathExists(receiveDir) { |
// if !libs.PathExists(receiveDir) {
|
||||
err := os.MkdirAll(receiveDir, 0755) |
// err := os.MkdirAll(receiveDir, 0755)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Failed to create receive directory: %v", err) |
// log.Printf("Failed to create receive directory: %v", err)
|
||||
return |
// return
|
||||
} |
// }
|
||||
} |
// }
|
||||
|
|
||||
// 确定文件路径
|
// // 确定文件路径
|
||||
filePath := filepath.Join(receiveDir, chunk.Filename) |
// filePath := filepath.Join(receiveDir, chunk.Filename)
|
||||
|
|
||||
// 如果文件不存在,则创建新文件
|
// // 如果文件不存在,则创建新文件
|
||||
if _, err := os.Stat(filePath); os.IsNotExist(err) { |
// if _, err := os.Stat(filePath); os.IsNotExist(err) {
|
||||
file, err := os.Create(filePath) |
// file, err := os.Create(filePath)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Failed to create file: %v", err) |
// log.Printf("Failed to create file: %v", err)
|
||||
return |
// return
|
||||
} |
// }
|
||||
defer file.Close() |
// defer file.Close()
|
||||
} |
// }
|
||||
|
|
||||
// 打开或追加到现有文件
|
// // 打开或追加到现有文件
|
||||
file, err := os.OpenFile(filePath, os.O_APPEND|os.O_WRONLY, 0644) |
// file, err := os.OpenFile(filePath, os.O_APPEND|os.O_WRONLY, 0644)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Failed to open file: %v", err) |
// log.Printf("Failed to open file: %v", err)
|
||||
return |
// return
|
||||
} |
// }
|
||||
defer file.Close() |
// defer file.Close()
|
||||
|
|
||||
// 写入数据
|
// // 写入数据
|
||||
_, err = file.Write(chunk.Data) |
// _, err = file.Write(chunk.Data)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Failed to write data to file: %v", err) |
// log.Printf("Failed to write data to file: %v", err)
|
||||
return |
// return
|
||||
} |
// }
|
||||
|
|
||||
fmt.Printf("接收到文件块 %d 从 %s 成功\n", chunk.ChunkIndex, msg.IP) |
// fmt.Printf("接收到文件块 %d 从 %s 成功\n", chunk.ChunkIndex, msg.IP)
|
||||
} |
// }
|
||||
func calculateChecksum(data []byte) uint32 { |
// func calculateChecksum(data []byte) uint32 {
|
||||
checksum := uint32(0) |
// checksum := uint32(0)
|
||||
for _, b := range data { |
// for _, b := range data {
|
||||
checksum += uint32(b) |
// checksum += uint32(b)
|
||||
} |
// }
|
||||
return checksum |
// return checksum
|
||||
} |
// }
|
||||
|
@ -0,0 +1,70 @@ |
|||||
|
package localchat |
||||
|
|
||||
|
// import (
|
||||
|
// "encoding/json"
|
||||
|
// "fmt"
|
||||
|
// "godo/libs"
|
||||
|
// "log"
|
||||
|
// "net"
|
||||
|
// "strings"
|
||||
|
// )
|
||||
|
|
||||
|
// // SendToIP 向指定的 IP 地址发送 UDP 消息
|
||||
|
// func SendToIP(message UdpMessage) error {
|
||||
|
// toIp := message.IP
|
||||
|
// port := GetBroadcastPort()
|
||||
|
// addr, err := net.ResolveUDPAddr("udp4", fmt.Sprintf("%s:%s", toIp, port))
|
||||
|
// if err != nil {
|
||||
|
// log.Printf("Failed to resolve UDP address %s:%s: %v", toIp, port, err)
|
||||
|
// return err
|
||||
|
// }
|
||||
|
|
||||
|
// // 使用本地地址进行连接
|
||||
|
// localAddr, err := net.ResolveUDPAddr("udp4", "0.0.0.0:0")
|
||||
|
// if err != nil {
|
||||
|
// log.Printf("Failed to resolve local UDP address: %v", err)
|
||||
|
// return err
|
||||
|
// }
|
||||
|
|
||||
|
// conn, err := net.ListenUDP("udp4", localAddr)
|
||||
|
// if err != nil {
|
||||
|
// log.Printf("Failed to listen on UDP address %s: %v", toIp, err)
|
||||
|
// return err
|
||||
|
// }
|
||||
|
// defer conn.Close()
|
||||
|
|
||||
|
// // 获取本地 IP 地址
|
||||
|
// localIP, err := GetLocalIP()
|
||||
|
// if err != nil {
|
||||
|
// log.Printf("Failed to get local IP address: %v", err)
|
||||
|
// return err
|
||||
|
// }
|
||||
|
// message.IP = localIP
|
||||
|
|
||||
|
// data, err := json.Marshal(message)
|
||||
|
// if err != nil {
|
||||
|
// log.Printf("Failed to marshal JSON for %s: %v", toIp, err)
|
||||
|
// return err
|
||||
|
// }
|
||||
|
|
||||
|
// _, err = conn.WriteToUDP(data, addr)
|
||||
|
// if err != nil {
|
||||
|
// log.Printf("Failed to write to UDP address %s: %v", toIp, err)
|
||||
|
// return err
|
||||
|
// }
|
||||
|
|
||||
|
// log.Printf("发送 UDP 消息到 %s 成功", toIp)
|
||||
|
// return nil
|
||||
|
// }
|
||||
|
|
||||
|
// // 获取 OnlineUsers 的最新状态
|
||||
|
// func GetOnlineUsers() map[string]UdpMessage {
|
||||
|
// return OnlineUsers
|
||||
|
// }
|
||||
|
// func GetLocalIP() (string, error) {
|
||||
|
// return libs.GetIPAddress()
|
||||
|
// }
|
||||
|
// func GetBroadcastPort() string {
|
||||
|
// addr := GetBroadcastAddr()
|
||||
|
// return addr[strings.LastIndex(addr, ":")+1:]
|
||||
|
// }
|
@ -1,106 +1,106 @@ |
|||||
//go:build windows
|
// //go:build windows
|
||||
// +build windows
|
// // +build windows
|
||||
|
|
||||
package localchat |
package localchat |
||||
|
|
||||
import ( |
// import (
|
||||
"encoding/json" |
// "encoding/json"
|
||||
"log" |
// "log"
|
||||
"net" |
// "net"
|
||||
) |
// )
|
||||
|
|
||||
func SendBroadcast(broadcastAddr string, message UdpMessage) error { |
// func SendBroadcast(broadcastAddr string, message UdpMessage) error {
|
||||
|
|
||||
addr, err := net.ResolveUDPAddr("udp4", broadcastAddr) |
// addr, err := net.ResolveUDPAddr("udp4", broadcastAddr)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Failed to resolve UDP address %s: %v", broadcastAddr, err) |
// log.Printf("Failed to resolve UDP address %s: %v", broadcastAddr, err)
|
||||
return err |
// return err
|
||||
} |
// }
|
||||
|
|
||||
// 使用本地地址进行连接
|
// // 使用本地地址进行连接
|
||||
localAddr, err := net.ResolveUDPAddr("udp4", "0.0.0.0:0") |
// localAddr, err := net.ResolveUDPAddr("udp4", "0.0.0.0:0")
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Failed to resolve local UDP address: %v", err) |
// log.Printf("Failed to resolve local UDP address: %v", err)
|
||||
return err |
// return err
|
||||
} |
// }
|
||||
|
|
||||
conn, err := net.ListenUDP("udp4", localAddr) |
// conn, err := net.ListenUDP("udp4", localAddr)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Failed to listen on UDP address %s: %v", broadcastAddr, err) |
// log.Printf("Failed to listen on UDP address %s: %v", broadcastAddr, err)
|
||||
return err |
// return err
|
||||
} |
// }
|
||||
defer conn.Close() |
// defer conn.Close()
|
||||
|
|
||||
// 获取本地 IP 地址
|
// // 获取本地 IP 地址
|
||||
localIP, err := GetLocalIP() |
// localIP, err := GetLocalIP()
|
||||
log.Printf("本地 IP 地址: %s", localIP) |
// log.Printf("本地 IP 地址: %s", localIP)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Failed to get local IP address: %v", err) |
// log.Printf("Failed to get local IP address: %v", err)
|
||||
return err |
// return err
|
||||
} |
// }
|
||||
message.IP = localIP |
// message.IP = localIP
|
||||
|
|
||||
data, err := json.Marshal(message) |
// data, err := json.Marshal(message)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Failed to marshal JSON for %s: %v", broadcastAddr, err) |
// log.Printf("Failed to marshal JSON for %s: %v", broadcastAddr, err)
|
||||
return err |
// return err
|
||||
} |
// }
|
||||
|
|
||||
_, err = conn.WriteToUDP(data, addr) |
// _, err = conn.WriteToUDP(data, addr)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Failed to write to UDP address %s: %v", broadcastAddr, err) |
// log.Printf("Failed to write to UDP address %s: %v", broadcastAddr, err)
|
||||
return err |
// return err
|
||||
} |
// }
|
||||
|
|
||||
log.Printf("发送消息到 %s 成功", broadcastAddr) |
// log.Printf("发送消息到 %s 成功", broadcastAddr)
|
||||
return nil |
// return nil
|
||||
} |
// }
|
||||
|
|
||||
// ListenForBroadcast 监听广播消息
|
// // ListenForBroadcast 监听广播消息
|
||||
func ListenForBroadcast() { |
// func ListenForBroadcast() {
|
||||
// 使用本地地址监听
|
// // 使用本地地址监听
|
||||
localAddr, err := net.ResolveUDPAddr("udp4", ":20249") |
// localAddr, err := net.ResolveUDPAddr("udp4", ":20249")
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Fatalf("Failed to resolve local UDP address: %v", err) |
// log.Fatalf("Failed to resolve local UDP address: %v", err)
|
||||
} |
// }
|
||||
|
|
||||
conn, err := net.ListenUDP("udp4", localAddr) |
// conn, err := net.ListenUDP("udp4", localAddr)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Fatalf("Failed to listen on UDP address: %v", err) |
// log.Fatalf("Failed to listen on UDP address: %v", err)
|
||||
} |
// }
|
||||
defer conn.Close() |
// defer conn.Close()
|
||||
// 获取本地 IP 地址
|
// // 获取本地 IP 地址
|
||||
localIP, err := GetLocalIP() |
// localIP, err := GetLocalIP()
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Failed to get local IP address: %v", err) |
// log.Printf("Failed to get local IP address: %v", err)
|
||||
} |
// }
|
||||
// 开始监听广播消息
|
// // 开始监听广播消息
|
||||
buffer := make([]byte, 1024) |
// buffer := make([]byte, 1024)
|
||||
for { |
// for {
|
||||
n, remoteAddr, err := conn.ReadFromUDP(buffer) |
// n, remoteAddr, err := conn.ReadFromUDP(buffer)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Error reading from UDP: %v", err) |
// log.Printf("Error reading from UDP: %v", err)
|
||||
continue |
// continue
|
||||
} |
// }
|
||||
|
|
||||
var udpMsg UdpMessage |
// var udpMsg UdpMessage
|
||||
err = json.Unmarshal(buffer[:n], &udpMsg) |
// err = json.Unmarshal(buffer[:n], &udpMsg)
|
||||
if err != nil { |
// if err != nil {
|
||||
log.Printf("Error unmarshalling JSON: %v", err) |
// log.Printf("Error unmarshalling JSON: %v", err)
|
||||
continue |
// continue
|
||||
} |
// }
|
||||
if udpMsg.IP == localIP { |
// if udpMsg.IP == localIP {
|
||||
continue |
// continue
|
||||
} |
// }
|
||||
OnlineUsers[udpMsg.IP] = udpMsg |
// OnlineUsers[udpMsg.IP] = udpMsg
|
||||
if udpMsg.Type == "file" { |
// if udpMsg.Type == "file" {
|
||||
RecieveFile(udpMsg) |
// RecieveFile(udpMsg)
|
||||
} |
// }
|
||||
log.Printf("Received message from %s: %s", remoteAddr, udpMsg.Hostname) |
// log.Printf("Received message from %s: %s", remoteAddr, udpMsg.Hostname)
|
||||
} |
// }
|
||||
} |
// }
|
||||
|
|
||||
func GetBroadcastAddr() string { |
// func GetBroadcastAddr() string {
|
||||
//return libs.GetUdpAddr()
|
// //return libs.GetUdpAddr()
|
||||
return "255.255.255.255:20249" |
// return "255.255.255.255:20249"
|
||||
} |
// }
|
||||
|
Loading…
Reference in new issue