Я отправляю некоторые данные с помощью функции сокета write (). На самом деле я использую QT и специально пишу, используя базовую функцию qint64 QIODevice :: write (const QByteArray & byteArray), но вопрос может быть применим и к C.
qint64 QIODevice :: write (const QByteArray & byteArray)реализован так:
inline qint64 write(const QByteArray &data)
{ return write(data.constData(), data.size()); }
Код выглядит примерно так:
// Function, send data once per second using a timer
void sendData()
{
...
...
// Create const QByteArray packet1, 100 bytes
socket->write(packet1); // packet1 is a const Byte Array
socket->flush();
// Create const QByteArray packet2, 1200 bytes
socket->write(packet2); // packet2 is a const Byte Array
socket->flush();
// Create const QByteArray packet3, 1200 bytes
socket->write(packet3); // packet3 is a const Byte Array
socket->flush();
return;
}
Все работает хорошо, но примерно 2-3 раза в день, некоторые из пакетных данных (в данныхзаголовок) искажается. Т.е. 2 или 3 пакета отображаются искаженными в течение 24 часов. Эти данные постоянны и не изменяются. Мне интересно, что-то здесь играет.
Мне любопытно - я посылаю данные слишком быстро. Использование waitForBytesWritten () является альтернативой flush (), и меня больше интересует точное определение того, что происходит.
Было бы разумнее вставить небольшой спящий режим между посылками, чтобы Ethernet Interpacket Gap (IPG)) уважается, или это будет слишком грубо?