J'essaie de développer une petite application permettant à un client PHP d'envoyer des informations à un serveur C via des sockets.

Niveau code source, j'ai pour mon serveur :
Code : 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
#include <sys/types.h>
#include <sys/socket.h>
 
#include <stdio.h>
 
 
 
#define PORT_SERV 23456
#define ADDR_SERV "192.168.239.245"
 
int main ()
{
	int err;
	// l'identifiant de la socket client
	int socket_serveur;
	int socket_client;
 
	int msg;
 
	// l'adresse de la socket serveur
	struct sockaddr addr_serveur = {AF_INET,htons(PORT_SERV), htonl(ADDR_SERV)};
 
	//l'adresse de la socket client
	struct sockaddr addr_client;
	int socket_client_taille;
 
	//------------------------------------------
	// on crée une socket et on recupère son descripteur. Les param :
	//PF_INET,le domaine, signifie qu'on utilise IPv4
	//SOCK_STREAM, pour dire qu'on envoye un flux
	//0, mais on c'est deja que c'est du TCP
	socket_serveur = socket(AF_INET, SOCK_STREAM, 0);
 
	//------------------------------------------
	// dans le cas du serveur il faut faire un bind
	// identifiant de la socket
	// adresse de la socket
	// taille de l'adresse
	bind(socket_serveur,&addr_serveur,sizeof(addr_serveur));
 
 
	//------------------------------------------
	// on attend une connection
	// on attend 1 connection sur la socket serveur
	listen(socket_serveur, 3);
 
	//------------------------------------------
	//on accepte une connection
	// sur la socket serveur
	// venant d'une addresse client
	// de taille...
	socket_client = accept(socket_serveur,&addr_client, &socket_client_taille);
 
	printf("La socket du client : %d\n", socket_client);
 
 
	//------------------------------------------
	// on attend un message
	// identifiant de la socket du client
	// adresse pour recevoir le message
	// taille de la zone de message
	// des options
	err = recv(socket_client,&msg, 4,0);
 
	printf("\nOn a lu %d octect\n",err);
	printf("\nLe message est le suivant : %d\n",msg);
 
 
	//------------------------------------------
	// on ferme la socket
	close(socket_serveur);
 
	return 0;
}
Pour ce qui est du client PHP, j'ai :
Code : 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
<?php
	// on crée la socket
	// pour IPv4
	// pour des flux
	// pour le protocole TCP
	$socket_client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
 
	echo("La valeur de l'identifiant de la socket : <br>");
	echo($socket_client);
 
 
	// il faut faire un bind de notre socket
	$err = socket_bind($socket_client, "192.168.239.245", 23457);
 
	if ($err === TRUE)
	{
		echo("<br>Lien cree<br>");
	}
 
 
	// on se connecte au serveur
	$err = socket_connect($socket_client, "192.168.239.245", 23456);
 
	if ($err === TRUE)
	{
		echo("Connection cree<br>");
	}
	else
	{
		echo ($err);
	}
 
	$msg = 'test';
	$taille = strlen($msg);
	echo($taille);
 
 
	// ensuite on envoi le message
	// l'identifiant de la socket emetrice
	// le message
	// la longueur du message
	// les options
	// l'adresse IP destinatrice
	// le port destinnataire
	if(socket_send($socket_client, $msg, $taille, 0x100) !== FALSE)
		echo ("Message envoye correctement");
 
	//on ferme la socket
	socket_close($socket_client);
?>
Je lance le serveur, puis je lance le client, et la j'ai un message d'erreur

Warning: socket_connect(): unable to connect [111]: Connection refused in <le nom de mon fichier> line 22
Voila, je sais qu'il est possible de parler via des socket d'une application PHP à une application C. Mais la je ne vois pas pourquoi ça ne marche pas. J'ai pensé à des problème de droits... mais bon. Quelqu'un a une idée ?