Не происходит отключение клиента в TCP-сервере на Arduino Leonardo ETH

Тема в разделе "Arduino & Shields", создана пользователем YeS, 20 июн 2016.

  1. YeS

    YeS Гик

    Всем добрый день!
    Написал тестовый TCP-сервер. Нужен для тестирования программы для смартфона. Всё вроде просто, но не могу понять почему периодически не происходит дисконнект клиента. Приходится перезапускать ардуину. Ткните пожалуйста носом в косяк. Вот код:
    Код (C++):
    #include <SPI.h>
    #include <Ethernet2.h>
    // TCP Server
    byte mac[] = {
    0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    //the IP address for the shield:
    IPAddress ip(192, 168, 8, 2);
    IPAddress subnet(255, 255, 255, 0);
    IPAddress gateway(192, 168, 8, 241);
    // Use TCP Port 4444 as Default
    EthernetServer server(4444);
    float randomNumber1, randomNumber2, randomNumber3;
    String lightings_config, floors_config;
    void setup()
    {
    Serial.begin(9600);
    Ethernet.begin(mac, ip);
    Serial.print("IP = ");
    Serial.println(Ethernet.localIP());
    // начинаем слушать клиента
    server.begin();
    // генерируем случайное число
    randomSeed(analogRead(0));
    }
    void loop()
    {
    String tempst;
    EthernetClient client = server.available();
    if (client)
    {
       Serial.println("Client Connected");
       // Выполняем пока клиент соединён
       while (client.connected())
       {
         // Поступили данные от клиента ?
         if (client.available())
         {
           char c = client.read();
           switch (c)    
           {
            case 67: // "C" -> Configuration
             Serial.println("CR");
             lightings_config = "данные 1";
             floors_config = "данные 2";
             tempst = String("Данные: CR$ ") + String(lightings_config) + String(", ") + String(floors_config) + String("\r\n");
             Serial.println(tempst);
             server.print(tempst);
             break;
           case 83: // "S" -> Start
             Serial.println("Data 1");
             randomNumber1 = random(220, 270)/10.;
             randomNumber2 = random(220, 270)/10.;
             randomNumber3 = random(220, 270)/10.;
             tempst = String("Данные: TR$") + String(randomNumber1) + String("|") + String(randomNumber2) + String("|") + String(randomNumber3) + String("\r\n");
             server.print(tempst);
             break;
           case 69: // "E" -> End
             Serial.println("Data 2");
             tempst = "Данные: LR$10-0|11-1|12-1\r\n";
             server.print(tempst);
             break;
           case 84: // "T" -> Connection Test
             Serial.println("Android Test Connection");
             server.print("TC&OK\r\n");
             break;
           }
         }
       }
       Serial.println("Client Disconnected");
    }
    }
     
  2. DIYMan

    DIYMan Guest

    А где вызов client.stop(), когда уже не надо ничего с ним делать? Может, в этом и фича.