php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2004

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.10.2004, 23:25  
Gast
 
Beiträge: n/a
Standard TCP-Verbindungstest - Timeout einbauen

Hallo,

ich bin ein Anfänger und habe mal versucht einen TCP-Porttest aufzubauen. Bis jetzt klappt auch alles bis auf eine Timeout-Funktion.
Wenn der TCP-Test erfolgreich war, dann gibt mir das Script sofort "TCP-Test Erfolgreich" aus. Wenn der TCP-Test aber fehlschlägt, lädt der Browser bis zum Programminternen Timeout.

Was ich möchte:
Eine Timeout-Funktion einbauen, dass im falle einer fehlgeschlagenen TCP-Verbindung sofort "TCP-Test Fehlgeschlagen" erscheint.

Ich habe mir die Manual auch schon angesehen, weiß aber nicht wo ich den Parameter einbauen soll.
Hier den Manual-Eintrag:
Zitat:
Der optionale Parameter timeout kann benutzt werden, um eine Fehlerwartezeit (Timeout-Wert) für den Verbindungsaufbau (in Sekunden) zu setzen.

PHP-Code:
<?php
$fp 
fsockopen($_SERVER['REMOTE_ADDR'], 8000);
if(!
$fp) {
    echo 
"TCP-Test Erfolgreich\n";
} else {
   
fwrite($fp"GET / HTTP/1.0\n\n");
   
stream_set_timeout($fp2,);
   
$res fread($fp2000,);
   
var_dump(stream_get_meta_data($fp));
   
fclose($fp);
   echo 
"TCP-Test Fehlgeschlagen";
}
?>
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 29.10.2004, 23:48  
Gast
 
Beiträge: n/a
Standard Re: TCP-Verbindungstest - Timeout einbauen

Zitat:
Zitat von executereaper
Was ich möchte:
Eine Timeout-Funktion einbauen, dass im falle einer fehlgeschlagenen TCP-Verbindung sofort "TCP-Test Fehlgeschlagen" erscheint.
int fsockopen ( string target, int port [, int errno [, string errstr [, double timeout]]])

Nimm einfach das Beispiel aus dem Handbuch.
 
Alt 30.10.2004, 00:00  
Gast
 
Beiträge: n/a
Standard

Das hat mich jetzt nicht 1mm weiter gebracht. Ich hab doch gesagt, dass ich nicht weiß, wie ich den Parameter in mein Script einbauen soll. Kannst du nicht einfach mein Script mit der Timeout-Funktion pasten?
 
Alt 30.10.2004, 00:02  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von executereaper
Kannst du nicht einfach mein Script mit der Timeout-Funktion pasten?
Ein bißchen mehr Eigeninitiative als nichts solltest Du schon an den Tag legen. Oder muß Dich Mutti morgens noch anziehen?
 
Alt 30.10.2004, 00:23  
Gast
 
Beiträge: n/a
Standard

4 Tage sitz ich schon dran. Jeden Tag ca. 2-3 h.
Meiner Meinung nach reicht das aus um die Lösung auf den Tisch zu bekommen.
Nach deiner Vorstellungsweise müsste jeder das Red selber für sich Erfinden, was ich nun überhaupt nicht richtig finde.

Zitat:
Oder muß Dich Mutti morgens noch anziehen?
Klar doch, danach gehen wir zusammen ins Bad, dass sie mir die Zähne putzen kann, dann fängt sie an mich zu füttern usw.
 
Alt 30.10.2004, 00:40  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Zitat:
Zitat von executereaper
4 Tage sitz ich schon dran. Jeden Tag ca. 2-3 h.
Meiner Meinung nach reicht das aus um die Lösung auf den Tisch zu bekommen.
Und was machst Du in der ganzen Zeit?
Wenn ich mir einen Schraubenzieher nehme, mich unter ein Auto lege, und dann jeden Tag 2-3 Stunden warte und mit dem Schraubenzieher rythmisch auf der Karosserie rumklopfe... wie lange dauert es wohl bis sich der Tank von selbst gefüllt hat?

Zitat:
Zitat von executereaper
Nach deiner Vorstellungsweise müsste jeder das Red selber für sich Erfinden, was ich nun überhaupt nicht richtig finde.
Nein, nach seiner Vorstellung müsste nur jeder morgen selbst aufstehen, selbst sein Brötchen schmieren und sich selbst die Schuhe zubinden. Mit irgendeiner Art von kreativer Leistung oder gar einer Erfindung ist hier nichts verbunden.

Im Manual steht, der wievielte Parameter von fsockopen() der Timeout ist. Du hast einen Aufruf von fsockopen() in deinem Script. Im Manual ist ein Beispiel, wie man es verwendet. Wo genau ist die Unklarheit? Wir verstehen es einfach nicht!
__________________
mod = master of disaster
Waq ist offline  
Alt 30.10.2004, 00:55  
Gast
 
Beiträge: n/a
Standard

Also hier mal die komplette Manpage:

Zitat:
Beschreibung:
int fsockopen ( [string udp://hostname, int port [, int errno [, string errstr [, double timeout]]]])



Öffnet eine Socket-Verbindung zum Internet (AF_INET, unter Verwendung von TCP oder UDP) oder unter Unix (AF_UNIX). Für eine Internet-Verbindung wird eine TCP-Socket-Verbindung zu hostname über den Port port hergestellt. Für eine UDP-Verbindung müssen Sie das Protokoll udp://hostname explizit angeben. Bei einer UNIX-Verbindung wird hostname als Socket-Pfad interpretiert, port muss in diesem Fall 0 sein. Der optionale Parameter timeout kann benutzt werden, um eine Fehlerwartezeit (Timeout-Wert) für den Verbindungsaufbau (in Sekunden) zu setzen.

Die Funktion fsockopen() gibt einen Zeiger auf eine Datei zurück, der in Verbindung mit anderen Datei-Funktionen (wie z.B. fgets(), fgetss(), fputs(), fclose(), feof()) gebraucht werden kann.

Wenn der Aufruf der Funktion scheitert, gibt er FALSE / falsch zurück und wenn die optionalen errno und errstr Argumente vorhanden sind, enthalten sie den aktuellen System-Fehler, der beim Aufruf der System-Funktion connect() (Verbindungsaufbau) erscheint bzw. passiert ist. Wenn die erhaltene errno 0 ist und die Funktion FALSE/falsch zurück gibt, ist dies ein Hinweis, dass der Fehler vor dem >connect()-Aufruf geschah. Das ist ein Problem, dass häufig mit der Initialisierung des Sockets zusammen hängt. Beachten Sie bitte, dass das errno und errstr-Argument als Referenz zu übergeben sind.

Abhängig von der vorhandenen Umgebung kann die Verbindung zu einer UNIX-Domäne oder der optionale Verbindungsaufbau-Zeitfehler nicht zur Verfügung stehen.

Also, als ich das ding jetzt schon 10000mal durchgelesen habe hab ich eben mal was neues versucht:

PHP-Code:
<?php
$fp 
fsockopen($_SERVER['REMOTE_ADDR'], 8000, &$errno, &$errstr2);
if(!
$fp) {
    echo 
"TCP-Test Erfolgreich\n";
} else {
   
fwrite($fp"GET / HTTP/1.0\n\n");
   
stream_set_timeout($fp2,);
   
$res fread($fp2000,);
   
var_dump(stream_get_meta_data($fp));
   
fclose($fp);
   echo 
"TCP-Test Fehlgeschlagen";
}
?>
Geht auch nicht.

Und noch das:

PHP-Code:
<?php
$fp 
fsockopen($_SERVER['REMOTE_ADDR'], 80002);
if(!
$fp) {
    echo 
"TCP-Test Erfolgreich\n";
} else {
   
fwrite($fp"GET / HTTP/1.0\n\n");
   
stream_set_timeout($fp2,);
   
$res fread($fp2000,);
   
var_dump(stream_get_meta_data($fp));
   
fclose($fp);
   echo 
"TCP-Test Fehlgeschlagen";
}
?>
Geht auch nicht.


Leute, wir sind im Anfängerforum. Ich bin Anfänger, also wo liegt das Problem mir das kurz und kompakt mitzuteilen wie das ganze funktioniert?
Ich weiß, dass ich hier Gast bin und ausserdem keinen Anspruch auf Support habe. Jedoch bin ich selbst auch Moderator in einem Forum und gehe sicherlich nicht so mit Neulingen um, die die Forenregeln, FAQ`s und die Manpage gelesen haben.
 
Alt 30.10.2004, 01:49  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von executereaper
Also, als ich das ding jetzt schon 10000mal durchgelesen habe hab ich eben mal was neues versucht:
Hier 3 Beispiele, die funktionieren:
http://test.php-help.info/fsockopen-1/
http://test.php-help.info/fsockopen-2/
http://test.php-help.info/fsockopen-3/

Zitat:
PHP-Code:
<?php
$fp 
fsockopen($_SERVER['REMOTE_ADDR'], 8000, &$errno, &$errstr2);
Das ist allerdings kühn, beim Client einen Dienst auf Port 8000 zu erwarten.

Zitat:
Leute, wir sind im Anfängerforum.
Ja klar. Im PHP Anfängerforum und nicht im Forum "Wie lerne ich lesen und schreiben".

Zitat:
Ich bin Anfänger, also wo liegt das Problem mir das kurz und kompakt mitzuteilen wie das ganze funktioniert?
http://de2.php.net/fsockopen

Mehr Quellen habe ich nicht.

Lust dazu, Dir einen populärwissenschaftlichen Vortrag über TCP, Dienste uam. so zu halten, daß Du es verstehst, habe ich ehrlich gesagt nicht, weil das nicht in 3 Zeilen zu erklären ist und weil es darüber hinreichend Infos im Netz gibt, die man sich ja mal durchlesen könnte, wenn man lesen will und kann. Entweder Du wirst selbst aktiv und liest Dir das Wissen an, was Dir fehlt, oder Du beschränkst Deine Projekte auf das, was Du verstehst.

Letzteres mache ich ebenfalls: ich habe zB. keinen Dunst von JavaScript (diese Sprache ist mir suspekt, weil sie auf jedem Browser anders implementiert ist), also lasse ichs oder verwende nur solche Scripts, die ich lauffähig kriege. Auf die Idee, mir in einer newsgroup oder in einem Forum all das haarklein erklären zu lassen, für was es haufenweise Texte gibt, käme ich gar nicht.
 
Alt 30.10.2004, 02:17  
Gast
 
Beiträge: n/a
Standard

Ich habe das Script 1 mal auf mich angepasst. Nun sieht es so aus:

PHP-Code:
<?php 
$IP 
= array(    $_SERVER['REMOTE_ADDR']); 
$port 8000
print (
'<table>'); 
for (
$i=0$i<count($IP); $i++) 


    if (! 
$fp = @fsockopen ($IP[$i], $port$errno$errstr1)) 
    { 
        
printf ('<tr><td>%s</td><td>%s</td></tr>'$IP[$i], $errstr); 
    } 
    else 
    { 
        
printf ('<tr><td>%s</td><td>%s (Port: %s)</td></tr>'
            
$IP[$i], 
            (!
$fp)     ? 'NO' 
                    
'OK'
            
$port); 
    } 

print (
'</table>'); 
?>
Wenn der Port geschlossen ist kommt: "Connection timed out"
Wenn der Port offen ist kommt: "Connection refused"

Wobei ich wieder an der Stelle von vor 2 Tagen wäre. Genau das soll nicht ausgegeben werden. Es soll ein beliebiger Text als ausgabe dranstehen.
Genau das ist der Knackpunkt den ich nicht hinbekomme.
 
Alt 30.10.2004, 02:50  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Zitat:
Zitat von executereaper
Also hier mal die komplette Manpage:
Welche Manpage? Die Manpage zu fsockopen sieht meist so aus:
"No manual entry for fsockopen"
Und das PHP-Manual hat NICHTS mit Manpages zu tun.

Zitat:
Zitat von executereaper
Also, als ich das ding jetzt schon 10000mal durchgelesen habe hab ich eben mal was neues versucht:
PHP-Code:
<?php
$fp 
fsockopen($_SERVER['REMOTE_ADDR'], 8000, &$errno, &$errstr2);
Das sieht doch gut aus. Fragt sich, warum Du das nicht schon nach dem ersten mal durchlesen gemacht hast.
Und es fragt sich, warum es bei mir funktioniert (abgesehen von den zwei parse-Errors durch überschüssige Kommata)...

Zitat:
Zitat von executereaper
Wenn der Port geschlossen ist kommt: "Connection timed out"
Wenn der Port offen ist kommt: "Connection refused"
Bei mir kommt bei einem Offenen Port ein "OK", bei einem geschlossenen Port ein "Connection refused" und bei einem Toten Server oder Port auf DENY ein "Connection timed out", also genau wie es sein soll. Ich würde sagen, dein Problem ist nicht das PHP-Script.
Ich habe bei deinem Script nur IP und Port angepasst.

Erstens bist Du fast unter Garantie damit durcheinander gekommen, welche Ports geschlossen sind und welche nicht und welche einfach tot (DENY oder STEALTH oder wie man es nennen will).
Zweitens hat vielleicht dein Hoster eine Firewall für ausgehende Verbindungen.
__________________
mod = master of disaster
Waq ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Captcha in Website einbauen Dartgott PHP Tipps 2008 9 23.04.2008 15:53
Captcha in bestehendes GB einbauen ZeroQL PHP Tipps 2008 6 08.04.2008 15:32
Einbauen Externer Scripts (UMFRAGE) Adminator PHP Tipps 2007 10 05.03.2007 10:32
Timeout b++ PHP Tipps 2006 4 21.04.2006 08:16
fsockopen - timeout funktioniert nicht! PHP Tipps 2007 3 23.01.2006 23:46
Schleife einbauen! Diego1978 PHP Tipps 2005-2 6 09.08.2005 13:56
[Erledigt] Eingaben ohne Timeout piepsen PHP Tipps 2005-2 8 13.07.2005 19:20
Große Daten in Datenbank einspielen ohne timeout PHP-Fortgeschrittene 5 22.05.2005 08:47
[Erledigt] blog script einbauen PHP Tipps 2005 14 15.05.2005 19:00
timeout problöme ... PHP Tipps 2005 5 20.01.2005 17:17
Session Timeout stefan-miti HTML, Usability und Barrierefreiheit 11 16.11.2004 15:32
Firefox - Wechseln zwischen Stylesheets - Wie einbauen? MrMarco HTML, Usability und Barrierefreiheit 2 14.09.2004 12:39
kann fckeditor nicht einbauen HTML, Usability und Barrierefreiheit 5 13.09.2004 08:10
Session Timeout ? PHP Tipps 2004 4 12.09.2004 11:44
suche script timeout oder paidlink oder ähnliches Beitragsarchiv 0 27.08.2004 21:18

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php tcp verbindung, tcp verbindung testen, fputs timeout, tcp verbindung php, javascript tcp verbindung, tcp verbindungstest, tcp verbindung timeout, verbindungstest, php timeout einbauen, test tcp timeout, php tcp socket, tcp timeout, firefox tcp timeout, php tcp timeout, tcp test, php timeout testen, javascript tcp, fsockopen timeout, tcp verbindung fehlgeschlagen connection refused, http://test.php-help.info/fsockopen-3/

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:02 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.