基于物联网技术的智慧城市公交管理源代码.docx
- 文档编号:8496116
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:25
- 大小:22.41KB
基于物联网技术的智慧城市公交管理源代码.docx
《基于物联网技术的智慧城市公交管理源代码.docx》由会员分享,可在线阅读,更多相关《基于物联网技术的智慧城市公交管理源代码.docx(25页珍藏版)》请在冰豆网上搜索。
基于物联网技术的智慧城市公交管理源代码
源代码
//SocketDataServerprojectmain.go
packagemain
import(
"SocketDataServer/Public/BZ"
"SocketDataServer/Public/Decryption/48"
"SocketDataServer/Public/JZCZ"
"bufio"
"bytes"
"
_"
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"database/sql"
"encoding/base64"
"encoding/binary"
"encoding/pem"
"errors"
"fmt"
"
."
"
"
"log"
rd"math/rand"
"net"
"os"
"os/exec"
"path/filepath"
"strings"
"sync"
"syscall"
"time"
)
typebusstruct{
chint64
unixint64
}
typejkxlstruct{
xlint//监控线路
}
typebusjlstruct{
xlint64//线路
chint64//车号
}
varpublicKey=[]byte(`
-----BEGINPUBLICKEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAI2CIunEj5Ono+3FMtS9NMCmG+ATNdRP
JAbjfv5Hn8w/PkivsUDG6CJE5bwUQ99IYjNOcYlIu98RTrrsMvhXwHkCAwEAAQ==
-----ENDPUBLICKEY-----
`)
typeMyMainWindowstruct{
*walk.MainWindow
}
varprivateKey=[]byte(`
-----BEGINRSAPRIVATEKEY-----
MIIBOgIBAAJBAI2CIunEj5Ono+3FMtS9NMCmG+ATNdRPJAbjfv5Hn8w/PkivsUDG
6CJE5bwUQ99IYjNOcYlIu98RTrrsMvhXwHkCAwEAAQJAaS1r08LkUIQOpOCoilTj
S7lrCJ5eqSH1jiUzM756uGzCYsTHrvDyjsp2sjEF7zXiIq5zTHG83D+gmEMMWoc/
vQIhALwWj8NfSIvvY+5adDhPILCX7yoLCkODp9R9eomhHckrAiEAwJoX2ApeEVyr
mCSrE2XWveAhw49ZtoY4fJb9JOTpQusCIG4eA2MNyOpsaCQm/v3sjaX1/caumf62
+K42HGSxWD/rAiEAnEKow7OtnCJ2aYqeba97KTPV0ObV33tICvUpTqyV/58CIGPe
Bfb+4kSiTpt+o0bjNRV/Pzb2+T2RaqKP60FLKt5N
-----ENDRSAPRIVATEKEY-----
`)
varlabiden*walk.Label
varlabdata*walk.Label
vartext*walk.TextEdit
varcheck*walk.CheckBox
varlabOracle*walk.Label
varlabsockadd*walk.Label
vartxtdata*walk.LineEdit
varbutton*walk.PushButton
varcheckSql*walk.CheckBox
varlabdataname*walk.Label
varsum2int=0
varsum3int=0
varsy1=new(sync.Mutex)
varsy2=new(sync.Mutex)
varsy3=new(sync.Mutex)
varsy4=new(sync.Mutex)
varsy5=new(sync.Mutex)
varsy6=new(sync.Mutex)
varsy7=new(sync.Mutex)
varsy8=new(sync.Mutex)
varsy9=new(sync.Mutex)
varsy10=new(sync.Mutex)
varpathmapmap[int]string=make(map[int]string)//路径map
varhmdmapmap[net.Conn][]bus=make(map[net.Conn][]bus)//黑名单客户端
varvideomapmap[net.Conn][]bus=make(map[net.Conn][]bus)//视频客户端
varddservermap[net.Conn]int64=make(map[net.Conn]int64)//调度服务器map
varsocketmapmap[net.Conn]int64=make(map[net.Conn]int64)//记录socket
varupdatemapmap[net.Conn][]bus=make(map[net.Conn][]bus)//升级客户端
varjkxlmapmap[net.Conn][]jkxl=make(map[net.Conn][]jkxl)//线路监控map
varhmdxlmapmap[net.Conn][]jkxl=make(map[net.Conn][]jkxl)//黑名监控线路
varbuffermapmap[net.Conn][]byte=make(map[net.Conn][]byte)//接收缓冲区map
varbusjlmapmap[net.Conn][]busjl=make(map[net.Conn][]busjl)//车载端记录
varupdatexlmapmap[net.Conn][]jkxl=make(map[net.Conn][]jkxl)//升级监控线路
funcinit(){
//获取当前程序的路径
file,_:
=exec.LookPath(os.Args[0])
p,_:
=filepath.Abs(file)
paths:
=strings.Split(p,"\\")
path:
=paths[0]+"/"
fori:
=1;i path=path+paths[i]+"/" } EXESql=file config=path+"config.cfg" pathdbys=path+"dbysdata" pathdbzd=path+"dbzddata" pathdbxf=path+"dbxfdata" pathdbcz=path+"dbczdata" pathmap[0]=path+"dbysdata" pathmap[1]=path+"dbzddata" pathmap[2]=path+"dbxfdata" pathmap[3]=path+"dbczdata" pathmap[4]=path+"log" for_,v: =rangepathmap{ _,err: =os.Stat(v) iferr! =nil{ err: =os.MkdirAll(v,0777) iferr! =nil{ return } } } logpath=path+"log/"+time.Now().Format("20060102")+".log"//创建日志 } funcmain(){ mw: =new(MyMainWindow) iferr: =(MainWindow{ AssignTo: &mw.MainWindow, Title: "通讯存储服务器v2.2"+EXESql, MinSize: Size{500,600}, Children: []Widget{ Label{ AssignTo: &labsockadd, Text: "通讯端口: ", }, Label{ AssignTo: &labdata, Text: "数据库地址: ", }, Label{ AssignTo: &labdataname, Text: "数据库名称: ", }, Label{ AssignTo: &labdatauser, Text: "数据库用户: ", }, CheckBox{ AssignTo: &checkSql, }, PushButton{ AssignTo: &button, Text: "保存", OnClicked: func(){ varhwndwin.HWND data,err: =RsaEncrypt([]byte(txtdatapass.Text())) iferr! =nil{ win.MessageBox(hwnd,Text(err.Error()),Text("提示"),win.MB_OK) return } password: =base64.StdEncoding.EncodeToString(data) str: ="[service]"+"\r\n" str=str+"socketadd="+txtsockadd.Text()+"\r\n" str=str+"InitialCatalog="+txtdataname.Text()+"\r\n" str=str+"DataSource="+txtdata.Text()+"\r\n" str=str+"userid="+txtdatauser.Text()+"\r\n" str=str+"password="+password+"\r\n" ifcheck.Checked(){ str=str+"iden=1"+"\r\n" }else{ str=str+"iden=0"+"\r\n" } ifcheckSql.Checked(){ str=str+"Sql=1"+"\r\n" }else{ str=str+"Sql=0"+"\r\n" } file,ers: =os.Create(config) ifers==nil{ w: =bufio.NewWriter(file) w.WriteString(str) w.Flush() file.Close() win.MessageBox(hwnd,Text("保存成功请重启生效"),Text("提示"),win.MB_OK) }else{ win.MessageBox(hwnd,Text("保存成功失败"),Text("提示"),win.MB_OK) } }, }, TextEdit{ AssignTo: &text, }, }, }.Create());err! =nil{ gologPrintln(err.Error()) } labsockadd.SetBounds(walk.Rectangle{10,10,65,20}) txtsockadd.SetBounds(walk.Rectangle{85,10,100,20}) labdata.SetBounds(walk.Rectangle{195,10,65,20}) txtdata.SetBounds(walk.Rectangle{270,10,100,20}) labdataname.SetBounds(walk.Rectangle{10,40,65,20}) txtdataname.SetBounds(walk.Rectangle{85,40,100,20}) labdatauser.SetBounds(walk.Rectangle{195,40,65,20}) txtdatauser.SetBounds(walk.Rectangle{270,40,100,20}) labdatapass.SetBounds(walk.Rectangle{10,70,65,20}) txtdatapass.SetBounds(walk.Rectangle{85,70,100,20}) txtdatapass.SetPasswordMode(true) labiden.SetBounds(walk.Rectangle{195,70,60,20}) labOracle.SetBounds(walk.Rectangle{300,70,60,20}) check.SetBounds(walk.Rectangle{270,70,20,20}) checkSql.SetBounds(walk.Rectangle{380,70,20,20}) button.SetBounds(walk.Rectangle{410,70,60,20}) text.Se }elseifsqlDb=="1"{ checkSql.SetChecked(true) } ifisiden=="1"{ check.SetChecked(true) }else{ check.SetChecked(false) } ifsqlDb=="0"{ conn="driver={SQLServer};SERVER="+Source+";UID="+id+";PWD="+string(pass)+";DATABASE="+Catalog }else{ conn="driver={MicrosoftODBCforOracle};SERVER="+Source+"/"+Catalog+";UID="+id+";PWD="+string(pass)+";" conn="DSN=oracle;PWD="+string(pass)+";" } db,dberr=sql.Open("odbc",conn) ifdberr! =nil{ gologPrintln(dberr.Error()) return } isdata=true gosockserver()//开启通讯监听 goEmptyConsole()//定时清空控制台和检测socket的连接是否有效 goConnectionData()//判断是否再次开启数据库连接 } mw.Run() } //通讯服务的监听 funcsockserver(){ sockadd: =": "+soadd listen,_: =net.Listen("tcp",sockadd) for{ conn,er: =listen.Accept() ifer! =nil{ continue } gofunc(cnet.Conn){ for{ rw: =bufio.NewReader(c) Receivebag: =make([]byte,1500)//数据包接收区 k,err: =rw.Read(Receivebag) ifk==0||err! =nil{ return } v,ok: =buffermap[c]//判断缓冲区map中存不存在此连接 ifok{//存在 v=append(v,Receivebag[0: k]...) buffermap[c]=v }else{ buffermap[c]=Receivebag[0: k]//这是此连接的第一个数据包 } Receivebag=nil handleStickpackage(c)//处理粘包解包 } }(conn) } } //处理网络粘包 funchandleStickpackage(connnet.Conn){ for{ bags: =buffermap[conn] iflen(bags)<7{ return } ifbags[0]==0x80||bags[0]==0xa0||bags[0]==0xb0{ length: =int(bags[1])*256+int(bags[2])//包长 iflength<7{ gologPrintln("紧急处理数据"+handledata(bags)) buffermap[conn]=buffermap[conn][len(bags): ] return } iflen(bags)>=length{ ifint(bags[length-1])==int(bags[0])+1{ buffermap[conn]=buffermap[conn][length: ] gohandleConnection(conn,bags[0: length]) }else{//不符合业务逻辑 iden: =false data: =handledata(bags) gologPrintln("出现数据包错误"+data) fori: =1;i ifbags[i]==0x80||bags[i]==0xa0||bags[i]==0xb0{ iden=true gologPrintln("错误数据进入处理"+IntToStr(i)) buffermap[conn]=buffermap[conn][i: ] break } } if! iden{ gologPrintln("错误数据无法过滤直接清除") buffermap[conn]=buffermap[conn][len(bags): ] return } } }else{//缓冲区不够一个完整包长 iden: =false data: =handledata(bags) iflength<1200{ gologPrintln("数据包长度缺失"+data) return }else{ gologPrintln("逻辑错误"+data) fori: =1;i ifbags[i]==0x80||bags[i]==0xa0||bags[i]==0xb0{ iden=true gologPrintln("逻辑错误数据处理"+IntToStr(i)) buffermap[conn]=buffermap[conn][i: ] break } } if! iden{ gologPrintln("逻辑错误无法过滤直接清除") buffermap[conn]=buffermap[conn][len(bags): ] return } } } }else{//非正常包开头 iden: =false data: =handledata(bags) gologPrintln("出现数据包异常"+data) fori: =1;i ifbags[i]==0x80||bags[i]==0xa0||bags[i]==0xb0{ iden=true gologPrintln("异常数据进入处理"+IntToStr(i)) buffermap[conn]=buffermap[conn][i: ] break } } if! iden{ gologPrintln("异常数据无法过滤直接清除") buffermap[conn]=buffermap[conn][len(bags): ] return } } } } //数据处理 funchandleConnection(connnet.Conn,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 联网 技术 智慧 城市 公交 管理 源代码