Последовательность пакетов 'waitForBytesWritten' из QIODevice - PullRequest
0 голосов
/ 03 апреля 2011

Являются ли эти коды одинаковым поведением для пульта:

a:

 socket.write("aaaa");
 socket.waitForBytesWrite(3000);
 socket.write("b");

b:

 socket.write("aaaa");
 socket.write("b");

Я знаю, что первый код получит "aaaab«но .. я не знаю, приведет ли второй код к« aabaa »или что-то еще.

Ответы [ 2 ]

1 голос
/ 30 января 2012

Какой тип сокета вы используете? TCP или UDP?

Если вы используете сокет TCP:

Первая и вторая строки приведут к «aaaab».


Если вы используете UDP:

Первая и вторая строки в очень плохом состоянии приведут к "aaaab" или "baaaa". Ниже код лучше застраховать последовательность пакетов UDP

socket.write("aaaa");
if (socket.waitForBytesWrite(3000))
   socket.write("b");
1 голос
/ 03 апреля 2011

Они эквивалентны (как, например, удаленный конец должен получать данные того же порядка). Во втором случае, если сокет не завершил отправку своего текущего фрагмента данных, новые данные для отправки будут добавлены в конец внутреннего буфера для последующей записи.

Это предполагает, конечно, что вы используете TCP - если вы используете UDP, нет никаких гарантий, что пакеты будут доставлены в том порядке, в котором вы их отправили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...