accept()



Açıklama

Geleneksel server.available () işlevi, yeni bir istemciden yalnızca veri gönderdikten sonra size söyler, bu da FTP gibi bazı protokollerin düzgün bir şekilde uygulanmasını imkansız hale getirir.

Amaç, programların available() veya accept() , ancak her ikisini birden kullanmaz. Available available() ile istemci bağlantısı EthernetServer tarafından yönetilmeye devam eder. available() çağrısı size istemcinin veri gönderdiği her şeyi vereceğinden, bir istemci nesnesini tutmanıza gerek yoktur. Basit sunucular, available() kullanılarak çok az kodla yazılabilir.

accept() ile EthernetServer , herhangi bir veri gönderip göndermediğine bakılmaksızın istemciyi yalnızca bir kez verir. Bağlı istemcileri takip etmelisiniz. Bu daha fazla kod gerektirir, ancak daha fazla kontrol elde edersiniz.

Sözdizimi

sunucu .accept ()

Parametreler

Yok

İadeler

bir İstemci nesnesi. Hiçbir istemcinin okuyabileceği veri yoksa, bu nesne bir if ifadesinde false olarak değerlendirilir. ( EthernetClient ).

Misal

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 69, 104);

// telnet defaults to port 23
EthernetServer server(23);

EthernetClient clients[8];

void setup() {
  Ethernet.begin(mac, ip);

  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // start listening for clients
  server.begin();
}

void loop() {
  // check for any new client connecting, and say hello (before any incoming data)
  EthernetClient newClient = server.accept();
  if (newClient) {
    for (byte i = 0; i < 8; i++) {
      if (!clients[i]) {
        newClient.print("Hello, client number: ");
        newClient.println(i);
        // Once we "accept", the client is no longer tracked by EthernetServer
        // so we must store it into our list of clients
        clients[i] = newClient;
        break;
      }
    }
  }

  // check for incoming data from all clients
  for (byte i = 0; i < 8; i++) {
    while (clients[i] && clients[i].available() > 0) {
      // read incoming data from the client
      Serial.write(clients[i].read());
    }
  }

  // stop any clients which disconnect
  for (byte i = 0; i < 8; i++) {
    if (clients[i] && !clients[i].connected()) {
      clients[i].stop();
    }
  }
}

Ayrıca bakınız