Так напишите небольшую программу на C и связывайтесь с стройством с помощью функций sendto() и recfrom() через структуры
sockaddr и sockaddr_in, тогда всё само собой будет вычисляться. Вот старый пример,
cam_udp.h в нём - это специализированный файл от видеокамеры, работающей по UDP.
#include <sys/uio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <bool.h>
#include <cam_udp.h>
void fill_cpack(CONTROL_PACKET *cp,unsigned int,unsigned int,int *,int);
int main() {
socklen_t lenf;
int n,nb,nsfd,len,lencp,len_cap,ncnt=1; //,i;
char buf[160],bufr[1024];
unsigned short int ucp=COMMAND_PORT;
unsigned int uadr,uport,un;
struct sockaddr_in addr,addrf;
CONTROL_PACKET cpack;
FILE *fin;
len=sizeof(struct sockaddr_in);lencp=sizeof(CONTROL_PACKET);nb=-1;
len_cap=sizeof(NET_CAMERA_CAPABILITES);
if(len<=0)len=16;if(lencp<=0)lencp=32; fin=fopen("read_port.in","r");
bzero((void*)&addr,len); if(fin!=NULL){n=fscanf(fin,"%x%[^\n]",&uport,buf);
n=fscanf(fin,"%s%[^\n]",buf+140,buf);
fclose(fin);}else{uport=0x18;strcpy(buf+140,"192.168.1.54");}
addr.sin_addr.s_addr=uadr=inet_addr(buf+140);addr.sin_family=AF_INET;
addr.sin_port=htons(ucp);nsfd=socket(AF_INET,SOCK_DGRAM,0);
// nb=bind(nsfd,(struct sockaddr*)&addr,len);
// if(nb<0){strcpy(buf,strerror(errno));fprintf(stdout,"%d %s\n",errno,buf);}
fprintf(stdout,"%d %d %d %d port=0x%X %u %u %s %d\n",lencp,len,nsfd,nb,uport,
uport,uadr,inet_ntoa(addr.sin_addr),len_cap);
fill_cpack(&cpack,uport,0,&ncnt,0); //read register
n=sendto(nsfd,(char*)&cpack,32,MSG_DONTROUTE,(struct sockaddr*)&addr,16);
if(n<0){strcpy(buf,strerror(errno));fprintf(stdout,"%d %s\n",errno,buf);
return 0;}
bzero((void*)&addrf,16);lenf=16;
n=recvfrom(nsfd,bufr,32,MSG_WAITALL,(struct sockaddr*)&addrf,&lenf);
memcpy((void*)&un,(void*)bufr,4);sprintf(buf," %08X",un);
memcpy((void*)&un,(void*)(bufr+4),4);sprintf(buf+9," %08X",un);
memcpy((void*)&un,(void*)(bufr+12),4);sprintf(buf+18," %08X",un);
memcpy((void*)&un,(void*)(bufr+20),4);sprintf(buf+27," %08X",un);
un&=0xffff;fprintf(stdout,"%d %d %d %s 15-0=%u\n",n,lenf,ncnt,buf,un);
return 0;
}