林發送UDP數據包:印IdUDPClient.sendbuffer - 在假數據接收使用Indy的IdUDPClient組分緩衝
FIdUDPclient.sendbuffer(AIP, APort, FIdUDPBuffer);
Frecl := FIdUDPclient.receivebuffer(FIdRecBuff, FreceiveTimeout);
權後,我得到了答案。
在調試代碼時使用wireshark顯示有時receivebuffer FIdRecBuff
包含意外的數據。
例如,接收到的字節使用Wireshark讀:
45 02 57 00
但是在調試FIdRecBuff
:
45 02 57 02
上面的代碼是在工作線程運行具有一個專用IdUDPClient實例。我只發送相同的3個字節,並獲得4個字節作爲來自三個IP設備的答案。
我認爲這個問題是,即時發送三個不同IP設備的UDP數據包沒有延遲,所以從IP回答不正確。 但indy的sendbuffer()方法阻塞直到收到,所以我不明白。
有人可以解釋什麼情況/條件會導致此行爲?
這也發生在indy tcp上,你需要知道事先要讀取多少字節。通常用indy修復的方法是事先發送字節數,然後讀取接收端的字節數。這個問題通常是爲什麼indy程序在閱讀時也會掛起。 –
還有發送/接收邏輯的問題。你做一個發送,然後2接收..首先獲得緩衝區長度,然後緩衝本身。這是一個尷尬的方法,需要習慣它。 –
@TuncayGöncüoğlu我不知道它是如何收到兩次。 Frecl只是一個返回receivebuffer方法的整數。 – grinner