Export depuis serveur web

Export depuis serveur web - C - Programmation

Marsh Posté le 10-02-2014 à 13:38:47    

Bonjour,  
J'ai deja ouvert un post sur la partie prog en PERL pour l'export de données
depuis un serveur web. après pas mal de recherche, je vais faire ce programme en C.
 
 
http://forum.hardware.fr/hfr/Progr [...] m#t2219083
 
Si quelqu'un passe par là, j'ai les bases de C et C++ et je debute en PERL . . .  
 
Merci
 
ju

Reply

Marsh Posté le 10-02-2014 à 13:38:47   

Reply

Marsh Posté le 10-02-2014 à 15:08:45    

1) C'est pas un serveur web mais tcp
2) le code perl est transparent:
 
creation d'une socket
socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp'));  
et ouverture
connect(SERVER, sockaddr_in($MODBUS_PORT, $server_ip)
creation d'une requête (encodage des parametres dans un paquet ad-hoc)
envoi de la requête
send(SERVER, $tx_buffer, 0);
reception, sur lequel on parse d'abord l'en-tête
recv(SERVER, $rx_buffer, 7, 0);  
et le reste après verification de l'en tete
recv(SERVER, $rx_buffer, $rx_hd_length-1, 0);  
decodage des données de la réponse.
fermeture de la socket
close SERVER;
 
Bref du code réseau complètement standard.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-02-2014 à 15:10:39    

oui,  
 
c'est vrai, code réseau standard, quand on connait le PERL,  
j'ai que 5-6 heures de Perl à mon actif, et donc je débute encore . . .  
 
Si j'ai des questions, je n'hesiterai pas à revenir ici, c'est super comme forum et rapide ^^
 
merci gilou :)

Reply

Marsh Posté le 10-02-2014 à 17:18:26    

clubber43 a écrit :

c'est vrai, code réseau standard, quand on connait le PERL


 
Quand on connait l'API des sockets BSD pour être exact (http://en.wikipedia.org/wiki/Berkeley_sockets), en général c'est relativement indépendant du langage (bien que l'API ait été faite pour du C à la base). J'ai l'impression que tu ne connais pas cette API, lorsque tu dis dans un de tes messages :
 

clubber43 a écrit :

je ne savais pas que l'on pouvait travailler directement sur les TCP en C / C++ . . .


 
Bon, va falloir t'y mettre alors, parce le code C sera très similaire au code PERL qui a été posté. Le nom des fonctions et leurs arguments sont pareils. Les quelques trucs spécifiques à PERL sont la construction de la requète et l'analyse de la réponse.
 
Cette API date un peu, il y a quelques aspects archaïques, mais sa tient retivement bien la route pour un truc aussi vieux.

Reply

Marsh Posté le 11-02-2014 à 17:04:41    

En cherchant un peu, on découvre l'existence d'une librairie "multiplateforme" libmodbus qui fait le boulot simplement
 
Pour faire votre requête spécifique:

Code :
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <modbus.h>
  4. int main(int argc, char *argv[])
  5. {
  6.     modbus_t *ctx;
  7.     int adresse = 264;
  8.     uint16_t valeur;
  9.     int rc;
  10.     ctx = modbus_new_tcp("192.168.1.253", MODBUS_TCP_DEFAULT_PORT);
  11.     if (modbus_connect(ctx) == -1) {
  12.         fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
  13.         modbus_free(ctx);
  14.         return -1;
  15.     }
  16.     rc = modbus_read_registers(ctx, adresse, 1, &valeur);
  17.     if (rc == -1) {
  18.         fprintf(stderr, "%s\n", modbus_strerror(errno));
  19.         modbus_close(ctx);
  20.         modbus_free(ctx);
  21.         return -1;
  22.     }
  23.     if (rc != 1) {
  24.         fprintf(stderr, "trop de valeurs retournées\n" );
  25.         modbus_close(ctx);
  26.         modbus_free(ctx);
  27.         return -1;
  28.     }
  29.     printf("<%d>: %d\n", adresse, valeur);
  30.     modbus_close(ctx);
  31.     modbus_free(ctx);
  32.     return 0;
  33. }


 
Multiplateforme est avec des "" parce que c'est pas ainsi que je qualifie du code qui ne se compile qu'avec Cygwin sous Windows..
 
A+,


Message édité par gilou le 11-02-2014 à 17:11:30

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed