Apтём (21.11.2019 13:42, просмотров: 176) ответил Ralex на Как очень поверхностное предположение, _начало_ отправки эха завязано не на окончание приема, а на начало приема последнего пакета, поэтому данные ещё недоприняты, а вы уже этот буфер отправляете...
Начало отправки никак не привязано к окончанию приёма (а почему оно должно быть привязано?). Если я пошлю файл 1 ГБ, куда я его сохраню? Вообще приём я не сам писал - взял из их примера: if (err == ERR_OK) {
/* Tell connection to go into listening mode. */
err=netconn_listen(conn);
while (1) {
/* Grab new connection. */
err = netconn_accept(conn, &newconn);
/*printf("accepted new connection %p\n", newconn);*/
/* Process the new connection. */
if (err == ERR_OK) {
struct netbuf *buf;
void *data;
u16_t len;
while ((err = netconn_recv(newconn, &buf)) == ERR_OK) {
/*printf("Recved\n");*/
do {
netbuf_data(buf, &data, &len);
byte_counter+=len;
uint8_t *d=(uint8_t *)data;
for (int i=0; i<len; i++) {
byte_sum+=d[i];
crc = (crc >> 8) ^ Crc32Table[(crc ^ d[i]) & 0xFF];
}
//err = netconn_write(newconn, data, len, NETCONN_COPY);
} while (netbuf_next(buf) >= 0);
netbuf_delete(buf);
}
/*printf("Got EOF, looping\n");*/
/* Close connection and discard connection identifier. */
netconn_close(newconn);
netconn_delete(newconn);
}
}
}
Добавил только подсчёт crc.