2011-04-03 20 views
0

的 'waitForBytesWritten' 是這些代碼遠程相同的行爲:序列包了QIODevice

一個:

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

B:

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

我知道的第一個代碼將得到「aaaab」但.. 我不知道第二個代碼是否會導致「aabaa」或其他東西。

回答

1

它們是等價的(如在遠端應該接收相同的數據順序)。在第二種情況下,如果套接字尚未完成發送它的當前數據塊,則要發送的新數據將被附加到內部緩衝區的末尾以供以後寫入。

當然假設您使用的是TCP - 如果您使用UDP,則不能保證數據包將按照您發送的順序到達。

+0

非常感謝!我想我應該閱讀更多的網絡編程閱讀.. :) – jnblue 2011-04-03 07:47:38

1

你使用什麼類型的插座? TCP還是UDP?

如果使用TCP套接字:

第一和第二線將導致 「AAAAB」。


如果使用UDP:在非常惡劣的條件

第一和第二線將導致 「AAAAB」 或 「baaaa」。下面的代碼更好地保證UDP數據包的序列

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