EthernetServer::accept()

名称

EthernetServer::accept()

説明

伝統的なserver.available()関数は、新しいクライアントがデータを送信したことを伝える。これにより、FTP(正しく実装するのは不可能だが)のようなプロトコルを作成することができる。

プログラムがavailable()とaccept()の両方を利用することはなく、片方だけを利用する。available()では、クライアントからの接続は、EthernetServerによって監理され続ける。available()を呼び出すと、クライアントが送信したデータを取得できるので、クライアントオブジェクトを保持する必要はない。簡単なサーバであれば、available()を使うことでほとんどコーディングする必要はなくなる。

accep()を使うと、EthernetServerは、クライアントがデータを送信したかどうかに関係なく、一度だけクライアントオブジェクトを返却する。プログラマは接続してきたクライアントを保持し続ける必要がある。このため、多くのコードが必要となるが、柔軟な制御を行うことが可能となる。

書式

EthernetClient EthernetServer::accept();

引数

なし。

戻り値

クライアントオブジェクト。どのクライアントからもデータ読み出しができないときは、このオブジェクトをif()文で評価したとき、falseとなる。

使用例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#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();
    }
  }
}

オリジナルのページ

https://www.arduino.cc/reference/en/libraries/ethernet/server.accept/

最終更新日

January 7, 2024

inserted by FC2 system