Webserver will wissen, wann sich ein Client verbunden hat

Hallo,

wenn ich einen Webserver über Arduino+Ethernet laufen lasse, dann kann ich über

EthernetClient client = server.available();
  if (client) { ...

herausfinden, ob sich ein Client verbunden hat und Daten gesendet hat.

Jetzt möchte ich aber nicht erst wissen, wann der Client Daten gesendet hat, sondern schon wenn der Client sich verbunden hat (ist bei HTTP-Anfragen kaum Unterschied, da dort direkt der Request folgt, aber bei reinen Text-Verbindungen will ich eine Willkommensnachricht senden, unmittelbar nachdem sich der Client verbunden hat.)

In der "EthernetServer.h" (bzw bei UIPEthernet: "UIPServer.h") habe ich aber nur die Funktion "available()" gefunden, und die gibt erst den Client aus, nachdem er was gesendet hat, was ich nicht will...

Wie finde ich heruas, wann sich ein CLient verbunden hat?
~Grüße

Im Moment hat die Library keine solche Funktion. Ist aber eine gute Anregung - ich werde bei Gelegenheit eine solche methode (Könnte z.B. 'UIPClientExt UIPServerExt::connected()' heißen) in die ext-version der library aufnehmen.

Gruß,

Norbert

Hallo,
das freut mich, ich glaube, diese Methode kann man häufig benötigen. Dann wird UIPEthernet noch besser!
Was ist eigentlich der Unterschied zwischen den Exp-Versionen und denjenigen, die mit Ext beginnen, z.B. Exp1.03

Ist die mit der höheren Versionsnummer immer die aktuellste und enthält alle Funktionen der vorherigen Releases?

mit 'ext' habe ich den Branch bezeichnet, der sinnvolle (nicht in der Standard-ethernet-library enthaltente) Erweiterungen enthält. Der Branch ist 'stable' in dem Sine, dass ich nicht plane diese Funktionen mal einfach so in Ihrem Verhalten zu ändern oder wieder rauszuwerfen.
'Experimental' habe ich mal Branches gekennzeichnet, in denen ich neue Funktionen mal zum testen implementiert habe ohne mich dafür entschieden zu haben, ob das ganze nicht noch mal überarbeitet und die Signaturen geändert werden würden.

Die Versionen 1.0x sind für die Arduino-IDE Version 1.0.* gedacht, die 1.5x haben die gleiche Funktionalität und den gleichen Patchstand, nur mit der zur Arduino-IDE 1.5.* passenden Verzeichnisstruktur. Zusätzlich ist in den 1.5x-Versionen der code für den Due mit drin. Also UIPEthernet_1.07 ist neuer als UIPEthernet_1.06. Und 1.56 ist die zur Arduino-IDE 1.5.* passende Version der UIPEthernet_1.06. Es sind bisher immer alle in den vorherigen Releases enthaltenen Funktionen erhalten geblieben.

Nur zur Vollständigkeit, bei der Standard-Ethernet-Library geht das so:

*** GET WHEN CLIENT HAS CONNECTED TO SERVER ***

http://forum.arduino.cc/index.php?topic=251801

modify EthernetServer::available (EthernetServer.cpp)
comment 'if (client.available())' and closing brace, l.60 + l.63

EthernetClient EthernetServer::available()
{
  accept();

  for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
    EthernetClient client(sock);
    if (EthernetClass::_server_port[sock] == _port &&
        (client.status() == SnSR::ESTABLISHED ||
         client.status() == SnSR::CLOSE_WAIT)) {
      // if (client.available()) {
        // XXX: don't always pick the lowest numbered socket.
        return client;
      // }
    }
  }

  return EthernetClient(MAX_SOCK_NUM);
}

// 18:30 28.10.2014

Und dann im eigentlichen Sketch folgende Befehle verwenden:

EthernetClient client = server.available(); // returns client if it has connected
if (client) {
    Serial.println("client connected");
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
...