Bonjour à tous.
C'est mon tout premier message ici

D'habitude, j'arrive plus ou moins à trouver mes réponses à droite ou à gauche mais là..... Je sèche !

Pour me présenter, je suis développeur PHP (procédural ) et je ne connais pas encore bien le mode des sockets.
Ma demande est pour un projet perso.

J'ai un capteur de consommation électrique qui envoi les données en Multicast vers le serveur du fabricant.

La fabricant fournis un code en C pour récupérer le flux.
Le voici :
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
 * listener.c -- joins a multicast group and echoes all data it receives from
 *the group to its stdout...
 *
 * Antony Courtney,25/11/94
 * Modified by: Frdric Bastien (25/03/04)
 * to compile without warning and work correctly
 */
 
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
 
 
#define HELLO_PORT 22600
#define HELLO_GROUP "224.192.32.19"
#define MSGBUFSIZE 800
 
main(int argc, char *argv[])
{
  struct sockaddr_in addr;
  int fd, nbytes,addrlen;
  struct ip_mreq mreq;
  char msgbuf[MSGBUFSIZE];
 
  u_int yes=1;            /*** MODIFICATION TO ORIGINAL */
 
  /* create what looks like an ordinary UDP socket */
  if ((fd=socket(AF_INET,SOCK_DGRAM,0)) < 0) {
    perror("socket");
    exit(1);
  }
 
 
  /**** MODIFICATION TO ORIGINAL */
  /* allow multiple sockets to use the same PORT number */
  if (setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes)) < 0) {
    perror("Reusing ADDR failed");
    exit(1);
  }
  /*** END OF MODIFICATION TO ORIGINAL */
 
  /* set up destination address */
  memset(&addr,0,sizeof(addr));
  addr.sin_family=AF_INET;
  addr.sin_addr.s_addr=htonl(INADDR_ANY); /* N.B.: differs from sender */
  addr.sin_port=htons(HELLO_PORT);
 
  /* bind to receive address */
  if (bind(fd,(struct sockaddr *) &addr,sizeof(addr)) < 0) {
    perror("bind");
    exit(1);
  }
 
  /* use setsockopt() to request that the kernel join a multicast group */
  mreq.imr_multiaddr.s_addr=inet_addr(HELLO_GROUP);
  mreq.imr_interface.s_addr=htonl(INADDR_ANY);
  if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) < 0) {
    perror("setsockopt");
    exit(1);
  }
 
  /* now just enter a read-print loop */
  while (1) {
    addrlen=sizeof(addr);
    if ((nbytes=recvfrom(fd,msgbuf,MSGBUFSIZE,0,
			 (struct sockaddr *) &addr,&addrlen)) < 0) {
      perror("recvfrom");
      exit(1);
    }
    msgbuf[nbytes] = 0x00; // null terminate before printing
    puts(msgbuf);
  }
}

Le problème... Je ne comprend rien en C

Je souhaiterai juste coder un script en PHP qui récupère le flux et qui le stocke (j'ai un NAS Synology sur lequel je peux exécuter des tâches CRON).

Il semblerait que j'ai affaire a des sockets.

J'ai tester ce petit script :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
<?
$ip = "224.192.32.19";
$port = "22600";
$fp = fsockopen($ip,$port,&$numErr,&$msgErr);
if(!$fp) {
	echo "Err";
 
}
else{
	echo "OK";
}
?>
Qui me renvoi :
Warning: fsockopen() [function.fsockopen]: unable to connect to 224.192.32.19:22600 (Address family not supported by protocol family) in /Applications/MAMP/htdocs/test2.php on line 4
Err
Et c'est là que je sèche.....! Et ça commence à m'énerver

Je m'en remet à vous car je n'est pas trouver grand chose là dessus.

Merci