[Php/C++] dialogue php et C++ via sockets

Fermé
The_Moye - 5 mars 2007 à 17:59
 tony - 31 mai 2011 à 16:31
Bonjour :)

Voilà, j'ai pour mission de faire dialoguer un programme C++ et un site web.
J'ai donc pensé créer un petit client PHP permettant l'envoie de ligne de commandes (et autres données) via sockets.
Mais j'ai quelques problèmes, j'arrive à faire dialoguer entre eux un serveur PHP et un Client PHP, idem pour deux prog C++, mais impossible de faire réagir mon C++ à mon PHP (ou l'inverse ^^)

Du coté PHP pour mon client, voici comment je procède :

[cpp]
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

$adresse = "127.0.0.1";
$service_port = "67414";

echo("Connexion a la socket... <br>");

$result = socket_connect($socket, $adresse, $service_port) or die("impossible de se connecter à la socket <br>");

echo("resultat du connect : ".$result."<br>");

while($out = socket_read($socket, 2048))
{
echo $out;
}

socket_close($socket);

echo("Socket fermé!<br>");
[/cpp]

Le connect est toujours "en attente de 127.0.0.1..."

Du coté de mon code C++ :

[cpp]
#include "stdafx.h"
#include "stdlib.h"
#include "iostream"
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
WSADATA WSAData;
int troc;
troc = WSAStartup(MAKEWORD(2,0), &WSAData);

cout<<" _Creation de la socket serveur..."<<endl;
SOCKET sock_serv;
SOCKADDR_IN add_serv;
add_serv.sin_addr.s_addr = INADDR_ANY;
add_serv.sin_family = AF_INET;
add_serv.sin_port = htonl(67414);
sock_serv = socket(AF_INET,SOCK_STREAM,0);
cout<<" _Socket serveur cree!"<<endl;

SOCKET sock_client;
SOCKADDR_IN add_client;

if( bind( sock_serv, (SOCKADDR *)&add_serv, sizeof( add_serv ) ) == SOCKET_ERROR ){
cerr<<"bind a échoué avec l'erreur "<< WSAGetLastError()<< endl;
cerr<<"Le port est peut-être déjà utilisé par un autre processus "<< endl;
closesocket( sock_serv );
WSACleanup();
return 1;
}
else
cout<<" _Bind OK!"<<endl;

if( listen(sock_serv, 0) == SOCKET_ERROR ){
cerr<<"listen a échoué avec l'erreur "<< WSAGetLastError()<< endl;
closesocket(sock_serv);
WSACleanup();
return 1;
}
else
cout<<" _Listen OK!"<<endl;

cout<<" _Serveur correctement demarre!"<<endl;

int longu = sizeof(add_client);

while(1)
{
cout<<" _Attente de l'acceptation de la connection..."<<endl;
if((sock_client=accept(sock_serv,(SOCKADDR *)&add_client,&longu))!=INVALID_SOCKET)
{
cout<<"Socket Thread connecte!"<<endl;

char *requete = new char[10];
int lg;

requete = "bonjour lecteur!\0";
lg=strlen(requete);
cout<<" _Longueur chaine : "<<lg<<endl;
send(sock_client,requete,lg,0);
}
else
cout<<"Socket Thread non connecte!"<<endl;

closesocket(sock_serv);
closesocket(sock_client);
cout<<" _Socket fermee!"<<endl;

system("pause");
return 0;
}
[/cpp]


Voilà voilà :)
Est-il possible de dialoguer entre ces deux language par cette méthode?

Merci d'avance de vos réponses!
A voir également:

5 réponses

Bonjour

je n'ai pas le temps de regarder ton code aujourd'huit mais je ferai cela des que possible.

pour repondre a ta question j'ai deja fait un client/serv cpp, un client/serv php et j'ai fait comuniquer les serveur et client php cpp entre eux sans aucun pb donc oui c'est possible à faire
0
Bonjour

Effectivement ça marche, je l'ai fait aussi.
Quels messages d' erreur obtiens-tu ?
Je suis étonné de voir un numéro de port > 65535 et de plus, déclaré comme chaîne de caractères en PHP.
0
Hello le père et TALSET =)

Merci de vos réponses, mais en fait ça fonctionne parfaitement (enfin j'ai du faire des modifs mais ça date d'un an, je ne me souviens plus, je jetterais un coup d'œil et posterais le code ici si ça intéresse du monde).

Aucun soucis pour le dialogue entre deux langages via sockets =)
0
stp peu tu poster ton code, merci
0
Oula mon ami tony, ça date de plus de 3ans, je n'ai aucune idée d'où est passé le code source.
0
Mon problème c'est que mon client et serveur fait en PHP se connectent entre le serveur et client en C aussi mais la liaison entre mon client C et le serveur PHP ne fonctionne pas.voila mon client en Objective-C :
struct hostent *h;
int port=5050;
char adresseserveurip[32]="10.11.0.110";
h = gethostbyname(adresseserveurip);
if (h==NULL) {
label3.text=@serveur iconnu";
}

servAddr.sin_family = h->h_addrtype;
memcpy((char *) &servAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
servAddr.sin_port = htons(port);

//Creation de la socket
socketclient = socket(AF_INET, SOCK_STREAM, 0);
if(socketclient<0) {
label3.text = @"Probleme de creation de socket";

}
//Connexion au serveur
rc = connect(socketclient, (struct sockaddr *) &servAddr, sizeof(servAddr));
if(rc < 0)
{
label3.text = @"Probleme de connexion";

//printf("Probleme de connexion\n");
//exit(1);
}
label3.text = @"connexion etablie, Vous allez envoyez une alarme";


et mon serveur en PHP:

<?php
$clients = array();
$socket = socket_create(AF_INET,SOCK_STREAM,0);
socket_bind($socket,'127.0.0.1',5050);
socket_listen($socket);

//while(true){
$newc = socket_accept($socket);
echo "Client $newc has connected\n";
$clients[] = $newc;
$input = socket_read($newc, 128);
echo $input;
socket_close($socket);
?>

any idea??
0
Dis-moi.. ça marche vraiment avec le port 67414 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Plop

Alors, je viens de verifier dans la dernière version du programme, le port est le suivant : 64535
Et ça fonctionne
0