#include "tnplib.h"
#include <iostream>
#include <cstring>
using namespace std;
const int MPORT = 60001;
const char* MADDR = "224.2.2.2";
const char* QSERA = "?any";
const char* QSERD = "?sensor";
const char* RSERD = "!sensor";
inline void D(const char *errormessage) {
#ifdef _DEBUG
cerr << errormessage << endl;
#endif
}
void MUDPDevice(const char * addr, int port) {
SOCKET ms;
sockaddr_in recvAddr, sendAddr;
char buffer[256];
ms = UDPStartMServer(port, 1);
UDPMulticastJoin(ms , addr);
UDPMulticastSetTTL(ms, 16);
sendAddr=CreateAddress(addr, port);
strcpy(buffer, RSERD);
strcat(buffer, " ");
UDPSendAny(ms, buffer, strlen(buffer)+1, sendAddr);
for (;;) {
UDPRecvAny(ms, buffer, sizeof(buffer), recvAddr);
buffer[255]='\0';
if ( (strcmp(buffer, QSERA)==0) || (strcmp(buffer, QSERD)==0) ) {
strcpy(buffer, RSERD);
strcat(buffer, " ");
UDPSendAny(ms, buffer, strlen(buffer)+1, sendAddr);
D(buffer);
}
}
UDPMulticastDrop(ms , addr);
UDPStopServer(ms);
}
int main()
{
SocketLibStart();
MUDPDevice(MADDR, MPORT);
SocketLibEnd();
return(0);
}