char id1;
char id2;
short status;
char data1;
char data2;
float summ;
double time;
unsigned int counter;
short graph1[MAXPOINTS];
float graph2[MAXPOINTS];
} packet_t;
если MAXPOINTS порядка 1000 — то все отысылается и принимается замечательно, если — >1500, в частности =2000 и выше — приходять битые данные, точнее graph1 и graph2 вроде нормальные, остальные — мусор. Грешил на выравнивание, менял тип данных — проблема осталась.
Буду рад любым предложениям по сабжу.
Re: Проблема при передачи большого куска данных по TCP
LX>если MAXPOINTS порядка 1000 — то все отысылается и принимается замечательно, если — >1500, в частности =2000 и выше — приходять битые данные, точнее graph1 и graph2 вроде нормальные, остальные — мусор. Грешил на выравнивание, менял тип данных — проблема осталась.
Выравнивание конечно нужно чтобы было одинковым
LX>Буду рад любым предложениям по сабжу.
У Вас, возможно, сокет на передающей стороне работает в неблокирующем режиме а send не контролируется на возможные ошибки ( переполнение буфера ), в результате данные просто не все передаются. Также возможно буфера освобождаются раньше, чем закончена передача. Не было каких нибудь непонятных падений?
Да пребудет с тобою сила
Re[2]: Проблема при передачи большого куска данных по TCP
Здравствуйте, TarasCo, Вы писали:
LX>>если MAXPOINTS порядка 1000 — то все отысылается и принимается замечательно, если — >1500, в частности =2000 и выше — приходять битые данные, точнее graph1 и graph2 вроде нормальные, остальные — мусор. Грешил на выравнивание, менял тип данных — проблема осталась.
TC>Выравнивание конечно нужно чтобы было одинковым
Это да, согласен, но если архитектура одна — то система сама заботится об этом, поросто размер пакета немного распухает... нет дело в другом... ведь при передачи 1000 елементов — все работает.
LX>>Буду рад любым предложениям по сабжу.
TC>У Вас, возможно, сокет на передающей стороне работает в неблокирующем режиме а send не контролируется на возможные ошибки ( переполнение буфера ), в результате данные просто не все передаются. Также возможно буфера освобождаются раньше, чем закончена передача. Не было каких нибудь непонятных падений?
пробовал и блокирующий и неблокирующие режим с проверкой аля
Здравствуйте, LeXa-XL, Вы писали:
LX>если MAXPOINTS порядка 1000 — то все отысылается и принимается замечательно, если — >1500, в частности =2000 и выше — приходять битые данные, точнее graph1 и graph2 вроде нормальные, остальные — мусор.
Очень похоже на то что ты где-то успеваешь сделать free (delete) принятой структуре. Потом вызываешь malloc (new), оно тебе возвращает тот же указатель и ты туда что-то пишешь. Потому начало структуры и получается запорченным — указатель на собственно принятую структуру уже давно недействителен, а память уже используется под другие данные.
Либо еще вариант. Недавно видел его в одном из около-апачевских модулей (они уже исправили):