#include "cedianudpprotocol.h" CedianUdpProtocol::CedianUdpProtocol(QObject *parent) : QQtUdpProtocol(parent) { } bool CedianUdpProtocol::dispatcher(const QNetworkDatagram & dg) { mDG = dg; mAddress = dg.senderAddress(); mPort = dg.senderPort(); mLocalPort = dg.destinationPort(); QByteArray data = dg.data(); mMsg.parser(data); emit msgIncoming(); } /*依赖已经初始化好的端口*/ CedianUdpProtocol *cedianUdpServer(QObject *parent) { static CedianUdpServer* s0[9] = {NULL}; static CedianUdpProtocol* p0 = NULL; if(!s0[0] && !p0) { p0 = new CedianUdpProtocol(parent); for(int i =0; i < 9; i++) { int port = cedianUdpPort(i+1); pline() << i+1 << port; s0[i] = new CedianUdpServer(parent); /*通讯端口:绑定本地端口*/ s0[i]->bind(port); /*通讯端口:给测点协议*/ s0[i]->installProtocol(p0); } } return p0; } /* * 这里最好添加一个针对测点的本地监听Port列表设置函数,给mainwindow调用。 * 初始化第一次调用,需要把port列表传进去。 * 以后只需要获取即可,这个端口列表,重启生效。 * 不要少于9个,不要越界。 * 1-9 */ qint32 cedianUdpPort(int siteID, qint32* portList) { if(siteID < 1 || siteID > 9) return 0; static qint32 sPort[9] = {0}; if(portList) { for (int i =0; i < 9; i++) { sPort[i] = portList[i]; } } return sPort[siteID-1]; }