2013-11-23 36 views
0

信息:我工作在一個VOIP應用程序。UDP套接字返回數據包的一部分

我使用C#Socket類並將它初始化爲UDP套接字。

我對接收代碼:

if(socket.Poll(-1,SelectMode.SelectRead)){ 
    if(!socket.Connected){ 
     return; 
    } 
    Console.WriteLine(" AVAIL:"+socket.Available); 
    int count = socket.ReceiveFrom (data, ref endpoint); 
    Console.WriteLine("LENGTH:"+count); 
    receivedEvent.Reuse (socket, data, count, (IPEndPoint)endpoint); 
    receivedFunction (receivedEvent); 
} 

我發送代碼:

int cnt = socket.SendTo (data, length, SocketFlags.None, ep); 
if (cnt != length) { 
    //LOG STUFF 
} 
if (sendEvent != null) { 
    sendEvent (cnt); 
} 

ERROR: 我從UDP套接字得到意想不到的數據,這意味着IM發送〜100個字節的數據,但我的只能得到31.哪一個是錯誤的=>我認爲UDP總是會給我全部或者全無。我錯了嗎 ?

所以我的問題是,UDP不應該可靠的數據包的意義?像我只應該得到有效或沒有數據包?

我似乎有另一個問題(不知道它是否連接到我當前的問題?),約30分鐘後,我的套接字只返回10作爲從套接字讀取數據的計數。

+0

你的錯誤是什麼 –

+0

@ShahroozJefriㇱ現在好了嗎? – Michiluki

+0

請把你錯誤 –

回答

0

So my question is, shouldn't UDP be reliable in sense of packets ? Like I only should get valid or none packets ?

否除非使用UDP校驗和,否則使用原始套接字?

ERROR: I get unexpected data from my udp socket, meaning im sending ~100 bytes of data but I only receive 31. Which is just wrong => I thought UDP will always give me all or nothing. Am I wrong ?

您是否停用IP分段? https://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.dontfragment%28v=vs.110%29.aspx

相關問題