Пример использования протокола UDP в GCC

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<arpa/inet.h>
#include<sys/socket.h>
 
#define SERVER "146.0.40.250" //Сервер
#define BUFLEN 512 
#define PORT 200   //Порт
 
  uint32_t rid;//Идентификатор пакета, произвольный
  uint8_t mac[6];//МАК адрес устройства
  uint8_t nowip[4];//Желаемый IP. Если 0.0.0.0, то установить определяемый адрес
  uint32_t pin;//PIN код

void die(char *s)
{
   perror(s);
   exit(1);
}
 
int main(void)
{
   struct sockaddr_in si_other;
   int s, i, slen=sizeof(si_other);
   char buf[BUFLEN];
   uint8_t message[BUFLEN];
 
   //Заполним пакет

   rid=12345;

   mac[5]=0x00;
   mac[4]=0xfa;
   mac[3]=0xea;
   mac[2]=0x34;
   mac[1]=0x04;
   mac[0]=0x65;

   nowip[3]=0;
   nowip[2]=0;
   nowip[1]=0;
   nowip[0]=0;

   pin=1234567890;

  //**************

   if ( (s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
   {
       die("socket");
   }
 
   memset((char *) &si_other, 0, sizeof(si_other));
   si_other.sin_family = AF_INET;
   si_other.sin_port = htons(PORT);
     
   if (inet_aton(SERVER , &si_other.sin_addr) == 0)  
   {
       fprintf(stderr, "inet_aton() failed\n");
       exit(1);
   }
 
       message[0]=(rid>>24)&0xff;
       message[1]=(rid>>16)&0xff;
       message[2]=(rid>>8)&0xff;
       message[3]=rid&0xff;
       
       message[4]=mac[5];
       message[5]=mac[4];
       message[6]=mac[3];
       message[7]=mac[2];
       message[8]=mac[1];
       message[9]=mac[0];

       message[10]=nowip[3];
       message[11]=nowip[2];
       message[12]=nowip[1];
       message[13]=nowip[0];

       message[14]=(uint8_t)(pin>>24);
       message[15]=(uint8_t)(pin>>16);
       message[16]=(uint8_t)(pin>>8);
       message[17]=(uint8_t)pin;
        

       //send the message
       if (sendto(s, message, 18 , 0 , (struct sockaddr *) &si_other, slen)==-1)
       {
           die("sendto()");
       }

     memset(buf,'\0', BUFLEN);
       if (recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen) !=0)
       {
           if((buf[0]==((rid>>24)&0xff))&(buf[1]==((rid>>16)&0xff))&(buf[2]==((rid>>8)&0xff))&(buf[3]==(rid&0xff))){
               printf("OK\n");
           }else{
               printf("ERROR\n");
           }
       }
         
 
   close(s);
   return 0;
}