recvfrom()/ sendto()
Funcțile sunt folosite pentru a primi/trimite o datagrama peste un socket. Mai multe detalii găsiți aici.
#include <sys/types.h>
#include <sys/socket.h>
struct sockaddr to;
// Filling server information
memset(&to, 0, sizeof(servaddr));
to.sin_family = AF_INET;
to.sin_port = htons(8888);
int rc = inet_aton("127.0.0.1", &to.sin_addr);
int byteswrite = sendto(int sockfd, char *buff, int nbytes, int flags, struct sockaddr *to, int addrlen);
if (byteswrite == -1) {
/* trateaza eroare */
}
/* from va fi populata de apelul recvfrom si va contine informatii despre cine a trimis datagrama catre noi */
struct sockaddr from;
int bytesread = recvfrom(int sockfd, char *buff, int nbytes, int flags, struct sockaddr *from, int *addrlen);
if (bytesread == -1) {
/* trateaza eroare */
}
Explicatii:
sockfd
- Descriptorul de fisier returnat de socket()buff
- Bufferul unde se găsesc datele ce urmează a fi trimise/bufferul unde se vor recepționa datele;flags
- Precizează condiții de efectuare a transmisiei;to/from
- Structura ce indica adresa unde se trimite/de unde se primesc date. In cazul lui recvfrom() se populeaza de către funcție.addrlen
- Lungimea structurii to/from în octeți. În cazul recvfrom(), este un pointer care trebuie să indice, la început, către o valoare egală cu dimensiunea zonei de memorie alocate pentru structura de tip adresă și este completă (restrânsă) - dacă este necesar - de către funcție.