Перейти к содержанию
    

TouchGFX+FreeRTOS+STM32F746 - медленная закгрузка

11 часов назад, jcxz сказал:

Вы нарисуйте себе диаграмму состояния сокета. Вот например:

FIN_WAIT_2 -> TIME_WAIT -> CLOSED.

Странно это выглядит, например, есть сервер, и клиент, который к нему подключился, происходит обрыв связи (перезагрузка клиента, например), в результате у сервера подвисает открытый порт, клиент перезагрузился, сбросил все свои порты, и вновь стучится к серверу, например, он не ждет все эти таймауты, и сразу делает коннект. Что в этом плохого, просто сервер откроет новый порт и все. Или по правилам надо ждать, пока оборванное соединение сбросится на сервере? Дак зачем, ну допустим у сервера закончились одновременно открытые порты - тогда и будет ждать, пока не освободятся. Вопрос, о долгоидущих пакетах, как уже было сказано, "По всем внутренним переменным сокета состояние TIME_WAIT ничем не отличается от CLOSED.", а следовательно соединение закрыто, то каким образом в уже закрытое соединение попадут эти пакеты? У них ведь нет запроса SYN_ACK? Они просто пропадут и все. Плюс к тому, раз в пол-секунды в стеке инкрементируется ID сессии, или как по другому называется, не помню, 32х битный счетчик. Или тут какой-то другой "тайный смысл"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, mantech сказал:

Странно это выглядит, например, есть сервер, и клиент, который к нему подключился, происходит обрыв связи (перезагрузка клиента, например), в результате у сервера подвисает открытый порт, клиент перезагрузился, сбросил все свои порты, и вновь стучится к серверу, например, он не ждет все эти таймауты, и сразу делает коннект. Что в этом плохого, просто сервер откроет новый порт и все.

Плохого в этом то, что Вы совсем не желаете прочитать ту ссылку, что я дал. Там как раз этот момент и разъясняется. И в приведённой мной выше цитате из той ссылки - тоже это объясняется. Если так не желать ничего изучить и прочитать, то объяснять можно бесконечно с 0-ым результатом. :unknw:

Потому, что если он вот так сразу откроет новый коннект (с этими-же самыми входящими и исходящими номерами портов и IP-адресами), то в этот новый коннект могут попасть фреймы задержанные в каких-то сегментах сети из старого коннекта. И нарушить его работу. Так как будет конфликт по номерам TCP-последовательностей. Вот чтоб такого не случалось и придумали TIME_WAIT.

Цитата

то каким образом в уже закрытое соединение попадут эти пакеты? У них ведь нет запроса SYN_ACK? Они просто пропадут и все.

У этих пакетов есть идентифицирующие их принадлежность 4 параметра: IP локальный, IP удалённый, порт локальный, порт удалённый. Принадлежность с какому-то существующему соединению. Когда принятый пакет имеет эти параметры полностью совпадающие с параметрами существующего открытого соединения, то TCP-стек считает этот пакет принадлежащим данному соединению. И попадут они не в закрытое соединение, а во вновь открытое без задержки сразу после старта.

Цитата

Плюс к тому, раз в пол-секунды в стеке инкрементируется ID сессии, или как по другому называется, не помню, 32х битный счетчик.

Это что за такое "ID сессии"? И зачем оно инкрементируется? Не помню такого в TCP/IP...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, jcxz сказал:

Это что за такое "ID сессии"? И зачем оно инкрементируется? Не помню такого в TCP/IP...

   

Дабы не лезть совсем в дебри, выдернул из исходника UIP...

/* Check if we were invoked because of the perodic timer fireing. */
  } else if(flag == UIP_TIMER)

{

    /* Increase the initial sequence number. */
    if(++iss[3] == 0) {
      if(++iss[2] == 0) {
    if(++iss[1] == 0) {
      ++iss[0];
    }
      }
    } 

--------------------------------

/* rcv_nxt should be the seqno from the incoming packet + 1. */ 

  uip_connr->snd_nxt[0] = iss[0];
  uip_connr->snd_nxt[1] = iss[1];
  uip_connr->snd_nxt[2] = iss[2];
  uip_connr->snd_nxt[3] = iss[3]; 





u8_t rcv_nxt[4];    /**< The sequence number that we expect to
             receive next. */ 

 u8_t snd_nxt[4];    /**< The sequence number that was last sent by
                         us. */ 

 

6 часов назад, jcxz сказал:

в этот новый коннект могут попасть фреймы задержанные в каких-то сегментах сети из старого коннекта. И нарушить его работу.

Т.е. только из-за этого весь "сыр-бор"?  Тогда понятно, просто в своих прогах всегда идентифицирую пакет по содержимому, вот и возникла "непонятка"...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не спорьте.

Знатоки TOuchGFX, ответьте лучше на вопрос.

Как по событию (нажатию кнопки) добавить новый элемент на экран, текст скажем?

Я настроила событие, при нажатии кнопки вызывается C++ код.

Как система выводит текст на экран по умлочанию?

Вот все что есть в программе про текст

touchgfx::TextArea textArea1;
........................................

textArea1.setXY(22, 40);
    textArea1.setColor(touchgfx::Color::getColorFrom24BitRGB(232, 225, 225));
    textArea1.setLinespacing(0);
    textArea1.setTypedText(touchgfx::TypedText(T_SINGLEUSEID3));

      
    add(textArea1);

Я вставила этот же код (заменив 1 на 2) в обработку нажатия кнопки. В итоге на этом месте программа виснет (кнопка так и остается нажатой).

Тот факт, что строка  touchgfx::TextArea textArea1; находится в разделе protected, наводит на нехорошие мысли

 

Вообще - можно ли создавать элементы динамически?

Изменено пользователем murmur

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...