QIODevice的数据包'waitForBytesWritten'的序列

时间:2011-04-03 04:02:46

标签: qt sockets

这些代码是否与遥控器的行为相同:

一个:

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

B:

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

我知道第一个代码会得到“aaaab”但是...... 我不知道第二个代码是否会产生“aabaa”或其他东西。

2 个答案:

答案 0 :(得分:1)

它们是等效的(例如,远程端应该接收相同的数据顺序)。在第二种情况下,如果套接字尚未完成发送当前的数据块,则要发送的新数据将附加到内部缓冲区的末尾,以便以后写入。

当然,这假设您正在使用TCP - 如果您使用UDP,则无法保证数据包将按您发送的顺序到达。

答案 1 :(得分:1)

您使用的是什么类型的插座? TCP还是UDP?

如果使用TCP套接字:

第一行和第二行将导致“aaaab”。


如果您使用的是UDP:

处于非常糟糕状态的第一行和第二行将导致“aaaab”或“baaaa”。下面的代码更好地确保UDP数据包的序列

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