RSS Feed  •  Profil  •  Private Nachrichten  •  Registrieren  •  Login 
  
 
im Forum


 FAQ   KarteKarte   Mitgliederliste   Benutzergruppen   Teamseite   Suchen 

Sockets -> Prüfen, ob ein neuer Client verbindet?

 
Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Düsi
Mitglied
Mitglied


Anmeldedatum: 25.09.2006
Geschlecht: Keine Angabe
Beiträge: 521

BeitragVerfasst am: 01.07.2009, 14:53    Titel: Sockets -> Prüfen, ob ein neuer Client verbindet?

Moin, mir gehts um folgendes Tutorial: http://devzone.zend.com/article/1086 (Zweites Codebeispiel)

Darin insbesonders um folgende Zeilen:
Code:

// Create a TCP Stream socket
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
// Bind the socket to an address/port
socket_bind($sock, $address, $port) or die('Could not bind to address');
// Start listening for connections
socket_listen($sock);

while(true)
{
    // Setup clients listen socket for reading
    $read[0] = $sock;
    ....
    if (in_array($sock, $read)) {
        for ($i = 0; $i < $max_clients; $i++)
        {
            if ($client[$i]['sock'] == null) {
                $client[$i]['sock'] = socket_accept($sock);
                break;
            }
        }
    }
    ....
}
....

Laut Tut soll also der Prüfen, ob sich ein neuer Client verbindet... Dazu wird geprüft, ob die Variabl $sock in dem Array $read enthalten ist?! So... wenige Zeilen darübert steht aber bereits ->
Code:
$read[0] = $sock;

Daher ist $sock ja im Grunde immer in $read enthalten ?! Abgesehen davon, verstehe ich auch sonst nicht, wie man auf eine solche Art überhaupt bestimmen kann, ob ein neuer Client verbindet... $sock sollte ja eine Resource sein, und wenn man diese Resource in ein Array schreibt und dann prüft, ob die Resource im Array ist möchte ein neuer Client eine Verbindung aufbauen? oO *verwirrt*
Im Tutoriel wird leider gerade diese Zeilen Code nicht weiters erklärt... Sad

MfG

Änderungsgrund von Düsi: Unbrauchbarer Code entfernt

Dieser Beitrag wurde insgesamt 1 mal geändert. Zuletzt von Düsi.
Nach oben
Benutzer-Profile anzeigen Düsi ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden
killerbees19
Administrator & BOFH
Administrator & BOFH

OC-Nickname: KB19

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 27 Jahre
Beiträge: 11675
Wohnort: Wien

BeitragVerfasst am: 01.07.2009, 23:15    Titel:

Also irgendwie blicke ich bei dem Code hier auch nicht durch, das ist wirklich unlogisch. Funktioniert das denn überhaupt bzw. hat das je bei wem so funktioniert?


MfG Christian
_________________


Dieser Beitrag wurde insgesamt 1 mal geändert. Zuletzt von killerbees19.
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Düsi
Mitglied
Mitglied


Anmeldedatum: 25.09.2006
Geschlecht: Keine Angabe
Beiträge: 521

BeitragVerfasst am: 02.07.2009, 15:00    Titel:

Jops, funktionen tuts schon... Würd aber gerne verstehen wie es funktioniert. Sad

Bzw... Wie könnte man sowas sonst lösen?
Schreibt man nur socket_access wird das Programm solange angehalten bis ein Client verbindet, schaltet man diese Blockierung aus kommt eine Fehlermeldung wenn nicht in der Sekunde ein Client verbindet wenn socket_access ausgeführt wird. Schreibe ich folgendes:

Code:

...
if(!socket_set_nonblock($socket)) {
  die('socket_set_nonblock schluf fehl');
}
...
$socket_access = @socket_access($socket);
if($socket_access > 0) {
...
}
...


Wird zwar erkannt, wenn ein neuer Client verbindet, jedoch schlägt sowowhl das schreiben als auch das lesen in / vom Socket fehl...

MfG

Dieser Beitrag wurde insgesamt 1 mal geändert. Zuletzt von Düsi.
Nach oben
Benutzer-Profile anzeigen Düsi ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht teilnehmen.
Du kannst postings in diesem Forum beanstanden.
Du kannst Dateien in diesem Forum nicht posten.
Du kannst Dateien in diesem Forum herunterladen.

 

Alle Zeiten sind GMT + 2 Stunden (Sommerzeit)
Aktuelles Datum und Uhrzeit: 18.10.2018, 09:09
Nach oben
Valid HTML 4.01 Transitional
Valid CSS!
Software based on work from the phpBB-Group  •  Deutsche Übersetzung von phpBB.de

netcup - Internetdienstleistungen
 
 
[ happytec.at | forum.happytec.at | blog.happytec.at | esports.happytec.at | event.happytec.at ]