PHP - Sockets können nur verbindungen von localhost (Port Forwarding problem?)

Zuerst einmal herzlichen Dank für die Zeit nehmen, dies zu Lesen. Ich habe ein seltsames problem mit PHP-sockets. Ich arbeite an einem php-socket-daemon, der funktioniert über localhost, aber wenn ich versuche eine Verbindung von außerhalb des LAN, oder einem anderen PC funktioniert es nicht. Ich habe vereinfacht, mein daemon, um eine sehr einfache socket-Verbindung zu replizieren, das Problem für Sie zu sehen.

Grundsätzlich, hier ist das senario. Ich start den socket-daemon auf meinem server auf port 6667. Ich kann eine Verbindung zu dem daemon über telnet und vom browser auf der lokalen Maschine läuft der daemon, aber ich kann nicht von irgendeiner anderen Maschine - der daemon nicht sogar ein Verbindungsversuch gemacht wird.

Weiter zu komplizieren das Problem (das ist, warum ich denke, dass es ein port forwarding Problem sein), mein ISP blockiert port 80, also ich hab das setup dyndns und meinem router den port 8000. Ich habe die Einstellungen für meinen router weitergeleitete port 6667 zu meinem server.

Für den Zugriff auf den daemon aus einem browser, geben Sie mir die folgende (seudo) url:

http://mydomain.com:8000/client.php

Dies funktioniert aus dem lokalen Computer und stellt eine Verbindung her, sondern auch von jeder anderen Maschine, der daemon nicht sogar ein Verbindungsversuch gemacht wird. Allerdings, wenn ich den port angeben, wie diese:

http://mydomain.com:6667

mein Dämon nicht sehen, dass eine Verbindung hergestellt wird, aber natürlich wird dann der browser nicht über eine client-Seite geladen, auf die der Benutzer zur Interaktion mit dem daemon.

Mein client verwendet eine flash-Datei zu erstellen, die die socket-Verbindung (jsocket), aber ich weiß, es ist nicht die cross-domain policy-Datei, weil die Politik richtig ist, und wenn eine Verbindung über localhost, es dient der policy-Datei korrekt.

Hier ist die vereinfachte daemon-code:

 <? 

//set some variables 
$host = '0.0.0.0'; 
$port = 6667; 

//don't timeout! 
set_time_limit(0); 

//create socket 
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); 

//bind socket to port 
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n"); 

//start listening for connections 
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n"); 

//accept incoming connections 
//spawn another socket to handle communication 
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n"); 

//read client input 
$input = socket_read($spawn, 1024) or die("Could not read input\n"); 

//clean up input string 
$input = trim($input); 

//echo input back 
$output = $input . "\n"; 
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n"); 

//close sockets 
socket_close($spawn); 
socket_close($socket); 
?>

Zusammenfassung:

KANN ich eine Verbindung von localhost per telnet und browser... ich KANN eine Verbindung von anderen Rechnern über telnet, aber ich KANN KEINE Verbindung vom browser von anderen Rechnern über die ip-oder domain-Namen, wenn port 8000 angegeben ist. Der Dämon sieht keine Verbindung versuchen. Wenn ich angeben, port 6667, dann wird der daemon sehen, die eine Verbindung versuchen, aber das ist nutzlos für die Nutzer. 🙁

Jede Hilfe in dieser Angelegenheit würde sehr geschätzt werden! Danke!

Firewall auf dem lokalen Rechner?
Firewall ist deaktiviert...

InformationsquelleAutor C-speed | 2011-02-08

Schreibe einen Kommentar