Komut
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 <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