• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Как объявить глобальный объект сервера TCP и назначить ему порт во время выполнения?

Atom

Member
Есть чудесный класс WiFiServer. Но что бы он работал, нужно задать ему определенный порт:
Код:
WiFiServer serverTCP(1081); // этот код компилится без проблем
Но стоит только объявить пременную, с настройкой в зависимости от параметра, то такой проект уже скомпилировать невозможно:
Код:
WiFiServer serverTCP; //error: no matching function for call 'WiFiServer::WiFiServer()'

void setupTCP(int tcpPort){

    serverTCP.begin(tcpPort);
}
 

Юрий Ботов

Moderator
Команда форума
WiFiServer* server;
uint16_t xx = 80;
...
server = new WiFiServer(xx);
server->begin();
...
WiFiClient client = server->available();


так?
 

Atom

Member
Учим C без классов :)
Меня сомнение взяло при использовании конструктора по умолчанию
Код:
WiFiServer serverTCP(1081); // этот код компилится без проблем
/code]

Поковыряв исходники и обнаружив коструктор с пустыми параметрами пытался сделать так:
[code]
WiFiServer* server();//вызов конструктора ()
...
(WiFiServer*)server) =  WiFiServer(tcp_port); //как бы создаем новый объект, вызовом конструктора (port)
((WiFiServer*)server).begin();
...
WiFiClient client = ((WiFiServer*).available();
Басня компилилась и даже инициализацию проходила нормально. Но вот в loop-е, где должно идти создание клинта уже рушилось все, что можно.
 
Сверху Снизу