我正在嘗試使用UDP發送數據包。我知道,如果頻道不空閒,數據包將不會被髮送。我正在使用QT的udpSocket->writeDatagram
發送UDP數據包。我正在做一個循環,我想確保在發送前一個數據包之前不發送另一個數據包。有沒有一個標誌,或任何其他方式,我可以檢查,並確保數據包發送?如何檢查UDP數據包是否在發送器上發送
回答
的docs說:
在數據大小大小到主機地址地址的發送數據報在 端口端口。返回成功發送的字節數;否則 返回-1。
所以,如果它返回-1
以外的東西,你可以認爲它是「發送」。然而,如果你真正想知道的是它是否讓它在另一邊,你會希望聽到同行的聲音。
UDP是一種不可靠的設計協議。它不能保證數據包不會丟失,當它們丟失時,發件人不會被通知。所以你永遠不知道對方是否成功接收到UDP數據包。
當然,除非您的應用程序級協議發送特定的響應。但是,迴應可能會很容易丟失,所以沒有任何迴應沒有明確證明數據包沒有收到。
通常,爲了儘可能快地發送UDP數據包(但不能更快),您需要將套接字置於非阻塞模式,然後以循環方式發送數據包,直到send()/ sendto()返回-1/EAGAIN(又名EWOULDBLOCK)。當返回結果代碼時,跳出發送循環循環並等待套接字再次變爲可寫。在Qt下,你可以設置一個QSocketNotifier對象(一次,在你設置你的套接字之後),並且只要你的套接字有更多外出數據的空間,它就會發出一個激活的(int)信號。當您收到該信號時,您可以發送更多的數據包。
是的,該策略可能會精確地使發件人的網絡接口飽和。但它也可能壓倒接收機的接口或任何中間網絡。 –
感謝你的回答,這很有用。 – TJ1
- 1. 發送UDP數據包gopacket
- 2. UDP發送數據包failling
- 3. C#如何知道是否發送UDP數據包?
- 4. 如何檢查廣播數據包是否從本機發送?
- 5. 檢查數據是否連續發送
- 6. 在iOS中發送udp數據包6
- 7. 在C發送UDP數據包#
- 8. 向客戶端發送UDP數據包時,服務器是否接收到它剛發送的數據包?
- 9. 如何在Mac OS X上讀取和發送UDP數據包?
- 10. C#發送UDP包
- 11. 如何檢查發送的電子郵件是否已發送?
- 12. 使用UDP協議發送數據包
- 13. 從chrome發送udp數據包
- 14. 通過Java發送UDP數據包
- 15. 從Linux內核發送UDP數據包
- 16. 從iPhone發送UDP數據包
- 17. Android AsyncTask發送UDP數據包
- 18. 缺少UDP發送數據包
- 19. 通過UDP發送數據包
- 20. 從Android平臺發送UDP數據包
- 21. java發送UDP數據包問題
- 22. 通過udp發送數據包
- 23. 聽,檢查和發送數據包C#
- 24. UDP數據永不發送?
- 25. 可以使用VB.net發送正常的UDP數據包 - 但是如何發送WOL數據包?
- 26. 發送帶有IP_TOS輔助數據的UDP數據包時sendmsg()失敗,並且發送UDP數據包
- 27. 如何在多宿主機器上以Java發送和接收UDP數據包?
- 28. 如何檢查zeromq中的發送數據是否成功
- 29. libpcap手錶是否發送數據包?
- 30. 如何檢查Pyserial發送的數據
非常感謝,我在QT文檔中忽略了這個解釋。 – TJ1