Enviar confirmação de mensagem do pc2 para pc1 por unicast em vez de broadcast

Bom dia, tenho este código feito, em que o trabalho é enviar uma mensagem do pc1 para o pc3, com um interlocutor no meio (pc2). Quando o pc2 recebe mensagem do pc1, envia ao pc1 confirmação de recebimento de mensagem. Quando o pc3 recebe a mensagem, envia para o pc2 a confirmação que por sua vez envia para o pc1. O envio da mensagem do pc2 para o pc3 é via broadcast. Tudo o resto é unicast, contudo no meu código tenho o envio da confirmação do pc2 para o pc1 também por broadcast. Alguém me consegue ajudar para mudar o código? Obrigado.

código do pc2:

 #include <stdio.h>  #include <stdlib.h>  #include <sys/types.h>  #include <sys/socket.h>  #include <netinet/in.h>  #include <string.h>  #define exit_on_error(s,m) if (s < 0) { perror(m); exit(1); }  #define MAX_BUFFER 512   int main(int argc, char* argv[])  {     int sock, length, fromlen, r, send_sock, sendlen, V = 1, n; //int n declarado     struct sockaddr_in SERVER_ADDR;     struct sockaddr_in FROM_ADDR;     struct sockaddr_in SENDTO_ADDR;     //struct sockaddr_in LOCALMENTE_addr;     char buf[MAX_BUFFER];      //verifica argumentos     if (argc != 5)     {         printf("USAGE: %s <a.porto> <ip_broadcast> <c.porto> <b.porto>\n",argv[0]);         exit(1);     }     //cria socket UDP     sock = socket(AF_INET, SOCK_DGRAM, 0);     if(sock < 0) printf("SOCKET");     length = sizeof(SERVER_ADDR);     bzero(&SERVER_ADDR, length);     SERVER_ADDR.sin_family = AF_INET;     SERVER_ADDR.sin_addr.s_addr = INADDR_ANY;     SERVER_ADDR.sin_port = htons(atoi(argv[1]));      setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &V, sizeof(V));     sendlen = sizeof(SENDTO_ADDR);     bzero(&SENDTO_ADDR, sendlen);     SENDTO_ADDR.sin_family = AF_INET;     SENDTO_ADDR.sin_addr.s_addr = inet_addr(argv[2]);     SENDTO_ADDR.sin_port = htons(atoi(argv[3]));      if(bind(sock, (struct sockaddr *)&SERVER_ADDR,length) < 0) printf("BIND:  ");      fromlen = sizeof(struct sockaddr_in);      while(1)     {      printf("Wait for the next message...!\n");     bzero(&buf, MAX_BUFFER);     n = recvfrom(sock,buf,MAX_BUFFER,0,(struct sockaddr *) &FROM_ADDR, &fromlen);        if (strstr(buf,"Confirma")){      printf("Mensagem recebida: [%s], bytes recebidos: [%d]\n",buf,n);       SENDTO_ADDR.sin_addr.s_addr = inet_addr(argv[2]);      SENDTO_ADDR.sin_port = htons(atoi(argv[4]));      n = sendto (sock, buf,MAX_BUFFER,0,(struct sockaddr *) &SENDTO_ADDR, sendlen);       }     else{     printf("Mensagem recebida: [%s], bytes recebidos: [%d]\n",buf,n);     SENDTO_ADDR.sin_addr.s_addr = inet_addr(argv[2]);     SENDTO_ADDR.sin_port = htons(atoi(argv[3]));    n = sendto (sock, buf,MAX_BUFFER,0,(struct sockaddr *) &SENDTO_ADDR, sendlen);      SENDTO_ADDR.sin_addr.s_addr = inet_addr(argv[2]);    SENDTO_ADDR.sin_port = htons(atoi(argv[4]));    strcpy(buf," Confirmado interlocutor. ");    n = sendto (sock, buf,MAX_BUFFER,0,(struct sockaddr *) &SENDTO_ADDR, sendlen);     }      }  } 

Enviar confirmação de mensagem ao SEND UDP

Boa tarde, tenho o código para UDPListen, que faz com que o PC1 envie uma mensagem até ao PC3 através de um interlocutor(PC2) , contudo, depois da mensagem chegar ao PC3, este tem de enviar ao PC1 a confirmar que recebeu a mensagem, contudo não estou a perceber como fazer essa parte. Aqui está o código do UDPListen

#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> /*  Aguarda por datagramas UDP no porto especificado  Digitar <Ctl><c> para abandonar  */ #define exit_on_error(s,m) if (s < 0) { perror(m); exit(1); } #define MAX_BUFFER 512  int main(int argc, char* argv[]){  int sockfd, size_addr;  struct sockaddr_in remote_addr;  struct sockaddr_in local_addr;  char ip_s[INET_ADDRSTRLEN]; //IP em dotted decimal notation  int bytes,r,v=1;  char buf[MAX_BUFFER];   //verifica argumentos  if (argc != 2) {   printf("USAGE: %s <porto>\n",argv[0]);   exit(1);}    for(i=0; i < strlen(agrv[1]); i++) //IP argv[1]   {    if(!isdigit(argv[1][i])) //IP argv[1]    {        printf("<porto> -> Apenas numeros inteiros!\n\n\n");        exit(1);    }   }   //cria socket UDP  sockfd = socket(AF_INET,SOCK_DGRAM,0);  exit_on_error(sockfd,"Error:socket()");  //permite broadcast  r=setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &v, sizeof(v));  exit_on_error(r,"Error:setsockopt()");   //regista (associa) socket localmente (IP+porto)  //necessarias permissões de root  bzero((char *)&local_addr, sizeof(local_addr));//Coloca a zero toda a estrutura  local_addr.sin_family = AF_INET;  local_addr.sin_addr.s_addr = htonl(INADDR_ANY); //IP Local  local_addr.sin_port = htons(atoi(argv[1])); //Porto  r=bind(sockfd, (struct sockaddr *)&local_addr, sizeof(local_addr));  exit_on_error(r,"Error:bind()");   //limpa var remote_addr  bzero((char *)&remote_addr, sizeof(remote_addr));   // aguarda por datagrama UDP  while (1){   printf("Aguarda UDP no porto %d\n",atoi(argv[1]));    size_addr=sizeof(remote_addr);   bytes = recvfrom(sockfd, buf, MAX_BUFFER-1, 0, (struct sockaddr *)&remote_addr, &size_addr);   // escreve origem e dados recebidos   inet_ntop(AF_INET,&(remote_addr.sin_addr),ip_s, sizeof ip_s);   printf("Recebido de: %s\n",ip_s);   printf("Porto: %d\n",ntohs(remote_addr.sin_port));   printf("Bytes lidos: %d\n", bytes);   buf[bytes]=0; //Null terminated string   printf("Dados: %s\n", buf);  }  //fecha socket  close(sockfd); } 

Também tenho o UDPSend e o UDPbw se for necessário colocar aqui. Alguém me pode ajudar?

mensagem de confirmação de envio para o banco de dados

Estou tentando inserir uma mensagem para o úsuario, quando o mesmo fizer um cadastro. Mas quando o envio é feito a mensagem não aparece para o úsuario. Obrigado pela ajuda!

Segue meu form

<form name="Form_CRUD" method="post" action="consulta.php" >     <div class="row">         <div class="col-6">             <div class="form-group">                 <label>Nome</label>                 <input type="text" id="nome_input" class="form-control" name="nome">             </div>         </div>     </div>     <div class="row">         <div class="col-6">             <div class="form-group">                 <label>Sobrenome</label>                 <input type="text" class="form-control" id="sobrenome_input" name="sobrenome">             </div>             <button type="submit" class="btn btn-primary">Adicionar</button>             <button type="submit" class="btn btn-primary">Alterar</button>             <button type="submit" class="btn btn-primary">Excluir</button>         </div>     </div> </form> <?php     $  validarenvio = isset($  _GET['s=1'])?$  _GET['s=1']:'';     if ($  validarenvio): ?> <div class=" alert alert-success" role="alert">     <strong>Sucesso!</strong>     Cadastro realizado com sucesso </div> <?php endif; ?> <?php     $  validarenvio = isset($  _GET['s=0'])?$  _GET['s=0']:'';     if ($  validarenvio): ?> <div class=" alert alert-danger" role="alert">     <strong>erro!</strong>     Erro de envio verifique! </div> <?php endif; ?> 

Segue minha consulta .php:

<?php require_once ('classes/conecta.php');  $  nomeCli = trim($  _POST['nome']); $  sobrenomeCli = trim($  _POST['sobrenome']); $  insert = "INSERT INTO clientes_cli"; $  insert .= " (nome_cli, sobrenome_cli)"; $  insert .= "VALUES ('$  nomeCli', '$  sobrenomeCli')"; $  Obj_Conexao = new CONEXAO(); $  inserir_dados = $  Obj_Conexao->Consulta($  insert); $  erro = 0; if($  inserir_dados == false){ header('Location: index.php?s=0'); } else{ header('Location: index.php?s=1');  }      ?>