Di seguito la procedura per inviare un pacchetto UDP attraverso un socket in un sorgente C per linux/unix.
Iniziamo definendo gli opportuni include generici:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
gli include specifici per il funzionamento dei socket
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
e le definizione dell'indirizzo ip e della porta di destinazione
#define IPADDR "192.168.1.100"
#define PORT (5000)
Successivamente creiamo il socket UDP
int s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (s == -1) {
perror("Creazione socket fallita");
exit(1);
}
definiamo e valorizziamo la struttura contenente la destinazione del pacchetto
struct sockaddr_in addr;
memset((char *)&addr, sizeof(addr), 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
inet_aton(IPADDR, &addr.sin_addr);
Creiamo e valorizziamo il buffer con i dati da inviare
int buf[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
ed infine inviamo il pacchetto sulla rete alla destinazione voluta
int len=sendto(s, buf, 10*sizeof(int), 0, (struct sockaddr *)&addr, sizeof(addr));
if(len < (10*sizeof(int))) perror("Invio fallito o incompleto");
Per concludere chiudiamo il socket
close(s);
Di seguito il sorgente completo
#include <stdlib.h>
#include <stdio.h>;
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define IPADDR "192.168.1.100"
#define PORT (5000)
int main() {
int s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (s == -1) {
perror("Creazione socket fallita");
exit(1);
}
struct sockaddr_in addr;
memset((char *)&addr, sizeof(addr), 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
inet_aton(IPADDR, &addr.sin_addr);
int buf[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int len=sendto(s, buf, 10*sizeof(int), 0, (struct sockaddr *)&addr, sizeof(addr));
if(len < (10*sizeof(int))) perror("Invio fallito o incompleto");
close(s);
return 0;
}
Nessun commento:
Posta un commento