Client sACN

De Centre de Ressources Numériques - Labomedia
Aller à : navigation, rechercher

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;
}