Klapatun 0 21 сентября, 2018 Опубликовано 21 сентября, 2018 · Жалоба Доброго времени суток! Имеется gsm-модем в связке с STM32F030, на модеме включен режим ppp. Со стороны МК, в свою очередь, крутится lwip. Функция настройки PPP в lwip: void lwip_start(void) { tcpip_init( NULL, NULL ); /*Инициализация стека tcp/ip*/ /*Create a new PPPoS interface*/ ppp = pppapi_pppos_create(&ppp_netif, output_cb, status_cb, 0); ppp_set_default(ppp); err_t err = pppapi_connect(ppp,0); if (err == ERR_ALREADY) { printf("Connected successfully"); } sys_thread_new("tcp_thread1", tcp_thread, NULL, 256, osPriorityNormal ); //задача tcp printf("Configuration end"); } В задаче tcp_thread я ожидаю соединение static void tcp_thread(void *arg) { struct netconn *conn, *newconn; err_t err, accept_err; while (1) { conn = netconn_new(NETCONN_TCP); if(conn) { err = netconn_bind(conn, IP_ADDR_ANY, 4111); if (err != NULL) { netconn_listen(conn); DEBUG_MSG("netconn_accept....\n"); osDelay(5); while(1) { accept_err = netconn_accept(conn, &newconn); if (accept_err == ERR_OK) { DEBUG_MSG("connection established \n"); HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0); } } } } } } Но когда с пк я пытаюсь установить соединение (использую hercules), в ответ приходят rst. Из netconn_accept, соответственно, не выходит. В чем проблема, не могу понять, буду очень благодарен, если кто-нибудь наставит на путь истинный. P.S. Данные пихаю в стек в отдельной задаче, используя функцию pppos_input_tcpip void uart_rxTask(void const * argument) { uint8_t u8=0, cnt=0, answer=0; uint8_t uart_buff[128]={0}; Sim8xFlag_t SimFlag; for (;;) { if (pdPASS == xQueueReceive(xQueue_Uart, &u8, 1000/portTICK_RATE_MS)) { if (PPP_Connect) { pppos_input_tcpip(ppp, &u8, 1); osDelay(1); }else /*Работа с AT-командами*/ { //Разбор AT-команд } } } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bzx 0 24 сентября, 2018 Опубликовано 24 сентября, 2018 · Жалоба Но когда с пк я пытаюсь установить соединение (использую hercules), в ответ приходят rst. Из netconn_accept, соответственно, не выходит. В чем проблема, не могу понять, буду очень благодарен, если кто-нибудь наставит на путь истинный. Сокет, скорее всего, не открыт. Под дебагером посмотрите все tcp syn. Если PPP настроен корректно, то увидите Ваше входяшее соединение с ПК. Если нет, копайтесь в PPP. Если соединение есть и сокет не открыт, то tcp сформирует rst, что Вы и видите. Поэтому, проверьте в tcp_thread, сформирован ли сокет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Klapatun 0 24 сентября, 2018 Опубликовано 24 сентября, 2018 · Жалоба Сокет, скорее всего, не открыт. Под дебагером посмотрите все tcp syn. Если PPP настроен корректно, то увидите Ваше входяшее соединение с ПК. Если нет, копайтесь в PPP. Если соединение есть и сокет не открыт, то tcp сформирует rst, что Вы и видите. Поэтому, проверьте в tcp_thread, сформирован ли сокет. Да, спасибо, что подсказали, сокет и правда был закрыт. После того, как переписал немного код (косяк был в if), соединение открылось, но в Wireshark началась какая-то вакханалия: после подтверждения обменом syn, модем решил не останавливаться на достигнутом и стал друг за другом слать клиенту syn и совершенно игнорировать отправленный в ответ ask, в итоге я заметил, что функция netconn_listen не возвращает положенный ERR_OK. Пока буду разбираться с этим, спасибо за помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Klapatun 0 25 сентября, 2018 Опубликовано 25 сентября, 2018 · Жалоба Сокет создается, netconn_listen возвращает ERR_OK и программа в задаче tcp_thread заходит в netconn_accept и ожидает сообщение от mbox. Как я понимаю, данное сообщение должно появится при подключении, но когда я пытаюсь с пк установить соединение с модемом, повторяется та же история, о которой я писал выше: сервер клинит и на syn от клиента от начинает бесконечно повторять свой ответный syn+ack, что я вижу в wireshark. Может, кто-нибудь знает из-за чего вообще может быть такая реакция? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться