Socket TCP, serveur C, client PHP
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:
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:
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
Citation:
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 ?