package main
import (
"fmt"
"log"
"net"
"os"
"strconv"
"strings"
"time"
"github.com/gopkg.in/mgo.v2"
// "github.com/gopkg.in/mgo.v2/bson"
)
const (
UDP_SERVER_IP = "192.168.22.179"
UDP_SERVER_PORT = 5002
UDP_SERVER_RECV_LEN = 1024
)
const (
MGO_DB_SERVER = "127.0.0.1:27017"
MGO_DB_DATABASE = "lc_test"
MGO_DB_COLLECTION = "people"
)
type RouterInfo struct {
RTMAC string `bson:"routerMac"`
CLMAC string `bson:"clientMac "`
CLIP string `bson:"clientIp "`
ONSTATE string `bson:"onlineState "`
DATE time.Time `bson:"date "`
}
func main() {
//连接数据库
session, err := mgo.Dial(MGO_DB_SERVER)
if err != nil {
panic(err)
}
defer session.Close()
session.SetMode(mgo.Monotonic, true)
db := session.DB("lc_test") //数据库名称
collection := db.C("people") //如果该集合已经存在的话,则直接返回
//UDP服务
address := UDP_SERVER_IP + ":" + strconv.Itoa(UDP_SERVER_PORT)
addr, err := net.ResolveUDPAddr("udp", address)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
conn, err := net.ListenUDP("udp", addr)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer conn.Close()
for {
// Here must use make and give the lenth of buffer
data := make([]byte, UDP_SERVER_RECV_LEN)
_, _, err := conn.ReadFromUDP(data) //rAddr
if err != nil {
fmt.Println(err)
continue
}
strData := string(data)
fmt.Println("Received:", strData)
if strings.Contains(strData, "routerMac='") {
if strings.Contains(strData, "clientMac='") {
if strings.Contains(strData, "clientIp='") {
//将获取到有效的的字符串数据进行分割处理
rt_comma := strings.Index(strData, "routerMac='")
rt_pos := strings.Index(strData[rt_comma:], "',")
fmt.Println(rt_comma, rt_pos, strData[(11+rt_comma):(rt_pos+rt_comma)])
// copy(rtMac, strData[(11+comma):(pos+comma)])
cl_comma := strings.Index(strData, "clientMac='")
cl_pos := strings.Index(strData[cl_comma:], "',")
fmt.Println(cl_comma, cl_pos, strData[(11+cl_comma):(cl_pos+cl_comma)])
// copy(clMac, strData[(11+comma):(pos+comma)])
ip_comma := strings.Index(strData, "clientIp='")
ip_pos := strings.Index(strData[ip_comma:], "',")
fmt.Println(ip_comma, ip_pos, strData[(10+ip_comma):(ip_pos+ip_comma)])
// copy(clIp, strData[(10+comma):(pos+comma)])
comma := strings.Index(strData, "onlineState='")
pos := strings.Index(strData[comma:], "\r")
fmt.Println(comma, pos, strData[(13+comma):(pos+comma)])
// copy(onState, strData[(13+comma):(pos+comma)])
//在这里将接收到的数据写入MongoDB数据库
temp := &RouterInfo{
RTMAC: strData[(11 + rt_comma):(rt_pos + rt_comma)],
CLMAC: strData[(11 + cl_comma):(cl_pos + cl_comma)],
CLIP: strData[(10 + ip_comma):(ip_pos + ip_comma)],
ONSTATE: strData[(13 + comma):(pos + comma)],
DATE: time.Now()}
err = collection.Insert(temp)
if err != nil {
log.Fatal(err)
}
} else {
fmt.Println("Please check msg clip")
}
} else {
fmt.Println("Please check msg clmac")
}
} else {
fmt.Println("Please check msg rtMac")
}
/*
_, err = conn.WriteToUDP([]byte(strData), rAddr)
if err != nil {
fmt.Println(err)
continue
}*/
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
test.zip (2个子文件)
test
test.exe 4.03MB
udp_server.go 3KB
共 2 条
- 1
资源评论
1375917982
- 粉丝: 7
- 资源: 80
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功