2011-11-01 4 views
1

Je voudrais me connecter à mon C++ serveur en utilisant php ... Jusqu'à présent, je suis arrivé:C++ et PHP socket connexion

Server.cpp

#include <winsock2.h> 
#include <iostream> 
using namespace std; 

int main(int argc, char *argv[]) 
{ 
WSADATA wsaData; 
SOCKET mySocket; 
SOCKET myBackup; 
SOCKET acceptSocket; 
sockaddr_in myAddress; 


// setup WSA and socket....  
if(WSAStartup(MAKEWORD(2, 2), &wsaData) != NO_ERROR) 
    { 
    cerr<<"Socket Initialization: Error with WSAStartup\n"; 
    system("pause"); 
    WSACleanup(); 
    exit(10); 
} 

//Create a socket 
mySocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 

if (mySocket == INVALID_SOCKET) 
{ 
    cerr<<"Socket Initialization: Error creating socket"<<endl; 
    system("pause"); 
    WSACleanup(); 
    exit(11); 
} 

myBackup = mySocket; 


//bind 
myAddress.sin_family = AF_INET; 
myAddress.sin_addr.s_addr = inet_addr("0.0.0.0"); 
myAddress.sin_port = htons(25555); 


if (bind (mySocket, (SOCKADDR*) &myAddress, sizeof(myAddress)) == SOCKET_ERROR) 
{ 
    cerr<<"ServerSocket: Failed to connect\n"; 
    system("pause"); 
    WSACleanup(); 
    exit(14); 
} 

//listen 
if (listen (mySocket, 10) == SOCKET_ERROR) 
{ 
    cout<<"ERR: ServerSocket: Error listening on socket\n"; 
    system("pause"); 
    WSACleanup(); 
    exit(15); 
} 
cout<<"srv started. listeninig...\n"; 

//accept 
acceptSocket = accept(myBackup, NULL, NULL); 
while (acceptSocket == SOCKET_ERROR) 
{ 
    acceptSocket = accept(myBackup, NULL, NULL); 
} 
mySocket = acceptSocket; 

cout<<"done.\n"; 

return 0; 
} 

et le client php

<?php 
$port = 25555; 
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); 
#socket_bind($socket,'',$port); 
socket_connect($socket, '/my_ip/', $port); 

echo 'connecting...'; 
?> 

Je ne sais pas quoi faire. le serveur C++ ne peut tout simplement pas voir le client php ...

+0

Avez-vous vérifié que votre serveur accepte les connexions de quoi que ce soit? 'Telnet your.ip.add.ress 25555' –

+0

ou faire un' netstat -plt' –

Répondre

1

Vous avez besoin des vérifications correctes en PHP pour vous assurer que tout a bien fonctionné.

Essayez ceci:

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
    if ($socket === false) { 
     die("socket_create() failed: Reason: " . socket_strerror(socket_last_error()) . "\n\n"); 
     return false; 
    } 

    echo("Attempting to connect to '{$IP}' on port '{$PORT}'"); 
    $result = socket_connect($socket, $IP, $PORT); 
    if ($result === false) { 
     echo("socket_connect() failed. Reason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n\n"); 
     return false; 
    } else { 
     echo "OK.\n\n"; 
    } 
+0

Merci pour les réponses rapides. J'ai essayé le code de Neal et j'ai obtenu: Tentative de se connecter à '83 .24.47.45 'sur le port' 25555'OK. même si le serveur est arrêté ou non ... –

+0

@ user1023753 assurez-vous que le port n'est pas un port partagé ou ouvert quelque part – Neal

0

vérification des codes d'erreur ...

socket_create 

socket_create() returns a socket resource on success, or FALSE on error. 

et

socket_connect 

Returns TRUE on success or FALSE on failure. 
The error code can be retrieved with socket_last_error(). 
This code may be passed to socket_strerror() to get a textual explanation of the error.