2012-01-17 60 views
0

我正在c#應用程序。我一直在24097端口獲取數據,我記錄的數據作爲如何使用UDP協議順序獲取數據包?

UdpClient client = null; 
IPEndPoint ipep = null; 
client = new UdpClient(24097); 
client.Client.ReceiveBufferSize = 25000; 
ipep = new IPEndPoint(IPAddress.Any,24097); 
while(flag) 
{ 
    byte[] data= = client.Receive(ref ipep); 
} 

但我的問題是什麼包我得到不按順序。我想以順序的方式接收它們。請幫助我。提前感謝。

回答

5

UDP不保證您發送的數據的順序。這是「火,忘了」。如果您需要將數據保存在有序流中,則需要使用TCP。

否則,你需要在你的數據報本身中實現某種序列ID。

+0

:謝謝,但是如果我想對這些數據包進行排序,有沒有辦法做到這一點? – Dany 2012-01-17 10:06:35

+0

正如我在我的回答中指出的那樣,如果您需要知道傳入UDP數據包的順序,則數據報本身必須有一些信息(數據)*,用於指示其順序。 UDP協議提供*無法*知道發送什麼順序數據報。也許就像使用序列號的數據報的前兩個字節一樣;客戶端每次增加一個。 – 2012-01-17 15:57:09

1

此鏈接可能會幫助

http://www.codeproject.com/Articles/176722/Sending-messages-to-workstations-using-Socket-Prog/?display=PrintAll&fid=1618703&df=90&mpp=25&noise=3&prof=False&sort=Position&view=Quick

該樣品有2份。 第一個是發件人(在某些電腦中),另一個是接收器(在客戶端電腦中)。 發件人中提到的端口應該與接收者中的端口相同。

發件人應用程序中有一個文本框和按鈕(發送)按鈕。 在相應的PC中運行這兩個項目。

點擊發件人發送按鈕後,文本框中的數據將依次發送給接收者。

希望它有一定的用處。謝謝。