2016-07-15 9 views
2

Also ich versuche, eine gehostete Website zu bekommen (nennen wir es online.com) in der Lage sein, einige Textdateien von meinem lokalen Apache (WAMP) zu greifen.Socket-Verbindung zu localhost ist Zeitüberschreitung

Allerdings, wenn ich den Code online.com lädt lädt für eine Weile dann Fehler 100 (Zeitüberschreitung). Ich weiß nicht warum.

Ich benutze Sockets, um dies zu tun. Ich habe die IP für online.com auf der Firewall meines PCs auf die weiße Liste gesetzt. Ich habe den Überwachungsport dem Apache-Server hinzugefügt. Ich habe die Portweiterleitung gemacht (obwohl ich mir nicht 100% sicher bin, ob ich das richtig gemacht habe).

Das Folgende ist eine symbolische Darstellung des Obigen.

Port-Forwarding

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

Apache

Listening on port Y 

Weiß aufgeführt

Added IP X 

Als ich das laufen PHP-Skript auf 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); 

Die Linie if(!socket_connect($sock , 'IP X' , PORT Y)) ist die Ursache des Problems.

Irgendwelche Vorschläge über was könnte falsch sein, würde sehr geschätzt werden.

+0

Was ist die Fehlermeldung? Ist das ein bestimmter Fehler, nachdem die Verbindung fehlgeschlagen ist? – gladiola

Antwort

0

Warum verwenden Sie Sockets? Versuchen Sie einfach eine reguläre HTTP-Anfrage an Ihre private IP-Adresse mit file_get_contents().

Beispiel,

<?php 

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

Ich werde das versuchen, vielen Dank. Lassen Sie es wissen, wie es geht – devonrimmington

+0

Diese Lösung war genau das, was ich brauchte. Ich musste nur einige der Apache-Einstellungen ändern und die richtigen Ports öffnen, aber jetzt kann ich von meinem Handy aus zugreifen! Ich habe Ihre Antwort akzeptiert – devonrimmington

0

Entschuldigen Sie mich, ich weiß jetzt, dass diese Client-Seite Code.

Die Connect-Methoden werden in der Regel schlafen, bis eine entsprechende Antwort vom Server gesendet wird. Sehen Sie, dass das Socket-Server-Programm versucht, auf diesen Client zu antworten? Eine Möglichkeit, dies zu überprüfen, besteht darin, dass die Serverseite einen Protokolleintrag schreibt, der jeden Verbindungsversuch darstellt.

Wenn der Code nur dort sitzt und keine Fehler liefert, kann es nur warten, wie es soll.

Wenn experimentelle Code für Client-Server-Systeme in Sockets erstellt wird, kann es helfen, auf Fehler wie connect, bind, send, receive, listen, accept und close zu prüfen.

+0

Ich werde Careys Lösung versuchen, bevor ich mich mit irgendetwas anderem beschäftige, das Sockets betrifft – devonrimmington

Verwandte Themen