2016-07-15 1 views
2

J'essaie donc d'obtenir un site Web hébergé (appelons-le online.com) pour pouvoir récupérer des fichiers texte de mon local Apache (WAMP). Cependant, lorsque je cours le code online.com se charge pendant un moment puis présente l'erreur 100 (délai expiré)La connexion par socket à localhost est expirée

Je ne sais pas pourquoi. J'utilise des sockets pour cela. J'ai ajouté à la liste blanche l'adresse IP pour online.com sur le pare-feu de mon PC. J'ai ajouté le port d'écoute au serveur Apache. J'ai fait la redirection de port (bien que je ne sois pas sûr à 100% si je l'ai fait correctement).

Ce qui suit est une représentation plus symbolique de ce qui précède.

redirection de port

online.com's IP = X, port = 80 
local host's IP = (used ipconfig) IPV4 Address, port = Y 

Apache

Listening on port Y 

liste blanche

Added IP X 

Quand je lance le script php sur online.com

if (!($sock = socket_create(AF_INET, SOCK_STREAM, 0))) 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 
    die("Couldn't create socket: [$errorcode] $errormsg \n"); 
} 

echo "Socket created \n"; 

// Connect socket to remote server 


**if (!socket_connect($sock, 'IP X', PORTY))** 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 
    die("Could not connect: [$errorcode] $errormsg \n"); 
} 

echo "Connection established \n"; 
$message = "GET/PRCC /HTTP/1.1 \r\n\r\n"; 

// Send the message to the server 

if (!socket_send($sock, $message, strlen($message) , 0)) 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 
    die("Could not send data: [$errorcode] $errormsg \n"); 
} 

echo "Message send successfully \n"; 
$buf = ""; 

// Now receive reply from server 

if (socket_recv($sock, $buf, 2045, MSG_WAITALL) === FALSE) 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 
    die("Could not receive data: [$errorcode] $errormsg \n"); 
} 

// print the received message 

echo $buf . "this is the buffer"; 
socket_close($sock); 

La ligne if(!socket_connect($sock , 'IP X' , PORT Y)) est la cause de la question.

Toutes les suggestions sur ce qui pourrait être faux seraient grandement appréciées.

+0

Quel est le message d'erreur? Est-ce que die() renvoie une erreur spécifique après l'échec de la connexion? – gladiola

Répondre

0

Pourquoi utilisez-vous des sockets? Essayez simplement une requête HTTP régulière sur votre adresse IP domestique avec file_get_contents().

Exemple,

<?php 

$text_file1 = file_get_contents("http://YOUR_IP:PORT/PRCC"); 
// so on.. 
+0

Je vais essayer, merci beaucoup. Laissez-vous savoir comment ça se passe – devonrimmington

+0

Cette solution était exactement ce dont j'avais besoin. J'ai juste dû changer certains des paramètres d'Apache et ouvrir les bons ports mais maintenant je peux accéder à partir de mon téléphone portable! J'ai accepté votre réponse – devonrimmington

0

Excusez-moi, je me rends compte maintenant que ce code côté client.

Les méthodes de connexion s'endorment généralement jusqu'à ce qu'une réponse appropriée soit envoyée par le serveur. Êtes-vous témoin du programme de serveur de socket essayant de répondre à ce client? Une façon de vérifier cela est d'avoir le côté serveur écrire une entrée de journal représentant chaque tentative de connexion.

Si le code est juste assis là, et ne fournissant pas d'erreurs, il peut juste attendre comme il est censé. Lorsque vous rédigez du code expérimental pour les systèmes client-serveur dans les sockets, il peut être utile de vérifier les erreurs à chaque étape, telles que: connecter, lier, envoyer, recevoir, écouter, accepter et fermer.

+0

Je vais essayer la solution de Carey avant d'aller de l'avant avec tout ce qui concerne les prises – devonrimmington