[Débutant] Socket en C + interaction avec du PHP

Socket en C + interaction avec du PHP [Débutant] - C - Programmation

Marsh Posté le 25-05-2004 à 15:28:52    

Bonjour,
 
Je suis une vrai bille en C, et je dois créer une application client/serveur en C sous Unix. Cette application doit communiquer avec une base de donnée MySql.
 
L'application pourrait très bien tourner toute seule avec des pages en PHP, mais je suis obligé dans mon projet d'utiliser les socket en C.
 
Qu'est-il mieux/plus facile de faire pour respecter mes contraintes:
_ programmer toute l'application en C (mais c'est plus facile d'utiliser des pages PHP car on peut utiliser des menus déroulants, des boutons radio, etc...) ?
_ programmer la majeure partie du programme en PHP et gérer les transferts par socket en C ? c'est possible ça ? (par exemple après validation d'un formulaire HTML/PHP à partir d'un client, le programme C sur le serveur avec les sockets gère le transfert des données, ou, tout du moins, va rediriger le client vers une autre page HTML/PHP qui enregistrera ces données si c'est possible). Il faudrait donc que le programme C du serveur communique avec la fenêtre Mozilla du client...
 
De plus, je suis complètement perdu avec les sockets. J'ai testé plusieurs programmes trouvés sur le net, des trucs touts simples du genre "envoi d'un hello world" du client vers le serveur, mais ça ne fonctionne jamais  :cry:  
Et si j'ai bien compris, si on a deux programmes en C, on peut ouvrir une fenêtre Terminal sous Unix qui exécute le serveur, une autre fenêtre Terminal qui exécute le client, et ces programmes pourront communiquer entre eux ?  
 
Bref, je suis largué  :cry:

Reply

Marsh Posté le 25-05-2004 à 15:28:52   

Reply

Marsh Posté le 25-05-2004 à 16:15:34    

Ca m'a l'air un peu tordu ton idée de php.
Procures toi la libmysql et commence par des choses tres simples (récupérer une donnée dans une table, ...)

Reply

Marsh Posté le 25-05-2004 à 16:19:42    

OK. Mais avec cette lib, on peut faire afficher des données venant de Mysql dans un programme C, mais le C c'est difficilement exploitable avec des données de bases de données. Je préférerai utiliser du PHP pour la mise en forme. Y-a-t'il moyen à partir du C de "balancer" les données récupérées de Mysql à une page internet, ou alors à partir du C de forcer un client à exécuter une page en PHP ?

Reply

Marsh Posté le 25-05-2004 à 16:23:54    

Elle s'appelle comment exactement la librairie pour mysql que je la cherche ?
Merci :hello:

Reply

Marsh Posté le 25-05-2004 à 16:24:51    

ben le C sera ton client mysql. Si tu veux faire du php, tu auras un client web et plus de C. Ca change les donnees de l'exercice. Au sujet d'une solution intermediaire C+php, je ne vois pas trop l'interet ni comment faire...

Reply

Marsh Posté le 25-05-2004 à 16:26:58    

libmysql #?^@! :na:

Reply

Marsh Posté le 25-05-2004 à 16:27:45    

Je pense que je vais faire la 1ere solution, c'est beaucoup plus simple, avec des socket sur le port 3306 pour Mysql. Par contre je vais en chier pour la mise en forme des données: je veux faire des menus déroulants :cry:


Message édité par la buvette le 25-05-2004 à 16:28:28
Reply

Marsh Posté le 25-05-2004 à 16:28:46    

merci syntax pour la lib, je vais chercher

Reply

Marsh Posté le 25-05-2004 à 16:29:23    

Aucune idee si c'est possible de faire communiquer le C et PHP, Honnetement, je pense pas (pour des raisons de securite). En tout cas, pour ta question sur les fenetre, oui, tu peu executer le serveur dans une console et comuniquer avec lui a travers une autre, c'est le role du port de connection. pour tes exmeple recuperer du net, essaie d'enlever les printf. Generalement c'est eux qui font planter l'affaire. Si ca marche toujours pas, j'ai un code assez simple avec un fork. Voila, slut

Reply

Marsh Posté le 26-05-2004 à 19:35:48    

biensur c'est possible, par ex:
 
server en c:

Code :
  1. #include <stdio.h>
  2. #include <sys/socket.h>
  3. #include <netdb.h>
  4. #include <unistd.h>
  5. #include <stdlib.h>   
  6. #include <string.h>
  7. main(int argc, char * argv[])
  8. {
  9. struct sockaddr_in addr,from;
  10. struct hostent *iptemp;
  11. socklen_t len=sizeof(addr);
  12. char buff[3000];
  13. int s,n,conn,sockop=1;
  14.         if (argc<2) {printf("USAGE: %s <port d'ecoute> [<ip locale>]\n",argv[0]);exit(-
  15. 1);}
  16.         if (argc==3)
  17.         {
  18.                 iptemp=gethostbyname(argv[2]);
  19.                 addr.sin_addr=*(struct in_addr*)iptemp->h_addr;
  20.         }
  21.         else addr.sin_addr.s_addr=INADDR_ANY;
  22.         addr.sin_family=AF_INET;
  23.         addr.sin_port=htons(atoi(argv[1]));
  24.         if((s=socket(PF_INET,SOCK_STREAM,0))<1) {perror("Socket" );exit(-1);}
  25.         setsockopt(s,SOL_SOCKET,SO_REUSEADDR,&sockop,sizeof(sockop));
  26.         if (bind(s,(sockaddr *)&addr,len)<0) {perror("Bind" );exit(-1);}
  27.         if (listen(s,4)<0) {perror("listen impossible" );exit(-1);}
  28.         conn=accept(s,(sockaddr*)&from,&len);           // accepte connexion
  29.         n=read(conn,buff,3000);
  30.         printf("recu %d octets :%s\n",n,buff);
  31.         strcpy(buff,"salut" );
  32.         write(conn,buff,6);
  33.         shutdown(conn,2);
  34.         close(conn);
  35.         shutdown(s,2);
  36.         close(s);
  37. }


 
en le client php:

Code :
  1. <?php
  2. $sock=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
  3. socket_connect($sock,"www.chezmoi.org",2210);
  4. socket_write($sock,"bonjour",7);
  5. $buff=socket_read($sock,50,0);
  6. socket_close($sock);
  7. echo $buff;
  8. ?>

Reply

Marsh Posté le 26-05-2004 à 19:35:48   

Reply

Marsh Posté le 27-05-2004 à 10:50:55    

Ah bah c'est cool ca merci pour l'info

Reply

Marsh Posté le 28-05-2004 à 13:01:03    

et il est ou le mysql ??

Reply

Sujets relatifs:

Leave a Replay

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