Client sACN
De Centre de Ressources Numériques - Labomedia
Révision de 9 décembre 2017 à 21:30 par Mushussu (discussion | contributions)
Le but du jeu est de proposer un client recevant de l'UDP d'un serveur sACN en C++
Documentation sACN : http://tsp.esta.org/tsp/documents/docs/E1-31-2016.pdf
///////////////////////////////////////////////////////////////////////////////////////////////////
//
// g++ -Wall -o UDP UDP.cpp
// Documentation sACN : http://tsp.esta.org/tsp/documents/docs/E1-31-2016.pdf
// http://bousk.developpez.com/cours/reseau-c++/UDP/01-introduction-premiers-pas/
//
///////////////////////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <iostream>
#include <string>
#include <sstream> // stringstream
using namespace std;
string intToHexString (int n) {
ostringstream oss;
oss << hex << n;
return oss.str();
}
string intToString (int n) {
ostringstream oss;
oss << n;
return oss.str();
}
int main(int argc, char *argv[]) {
// Création du socket
int sckt = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
if (sckt < 0) {
perror("socket");
exit(1);
}
// Ouverture du socket
sockaddr_in adresse;
adresse.sin_family = AF_INET; // L'adresse est IPv4
adresse.sin_port = htons(6000); // Définit le port
adresse.sin_addr.s_addr = INADDR_ANY; // Permet d'écouter sur toutes les interfaces locales
int res = bind(sckt, (struct sockaddr*) &adresse, sizeof(adresse));
if (res < 0 ) {
perror("bind");
exit(1);
}
// Boucle principale
while(1) {
char packet_data[638];
struct sockaddr_in cliaddr;
socklen_t taille = sizeof(cliaddr);
int received_bytes = recvfrom(sckt, packet_data, sizeof(packet_data), 0, (struct sockaddr*) &cliaddr, &taille);
if ( received_bytes > 0 ) {
// Traitement des données reçues
//Affichage des valeurs
string blip = "";
for (int i = 126; i < 638; i++) {
blip.append(intToString(packet_data[i]) + "/");
}
cout << blip << endl << endl;
}
}
close(sckt);
return 0;
}