PDA

View Full Version : سوال: دریافت udp با نرخ بالا و حداقل data lost (برنامه نویسی سوکت)



morteza.m
چهارشنبه 29 مهر 1394, 23:09 عصر
سلام دوستان برنامه نویس.
یه sender دارم که پکت های 1kbyte رو از طریق udp ارسال می کنه. (با سرعت حدود 30MByte/Sec )
یه receiver هم دارم که میخواد این پکت ها رو دریافت کنه. ولی متأسفانه نمیتونه کامل دریافت کنه و بین 1 تا 3 درصد دیتاها از دست میرن!
چطور میشه نرخ دریافت رو افزایش داد تا دیتای کمتری از دست بره؟
این هم کد داخل thread دریافت کننده:


receiveSok.ReceiveTimeout = 100;
while (flag == true)
{
for (int i = 0; i < 2; i++)
{
int k = 0;
while (k < pingLen & flag == true)
{
try
{
receiveSok.ReceiveFrom(pingpong[i, k].buffer, ref ep);
k++;
}
catch
{ }
}
IsFull[i] = true;
}
}



receiveSok همون سوکت دریافت کننده است.
از روش ping pong استفاده می کنم (شمارنده حلقه for نشان دهنده ping یا pong است)
طول هر ping یا pong برابر است با pingLen
هر عضو ping یا pong یک بافر داخل خودش داره (با طول 1KByte) که پکت های دریافتی داخل اون بافر ذخیره میشه. (به دلیل استفاده ای که بعدا ازشون دارم)
در آخر هم که اعلام میکنه که ping یا pong پر شده (جهت استفاده های بعدی)

ممنون میشم کمکم کنید.

am_al_59
جمعه 01 آبان 1394, 13:05 عصر
در این مورد فکر نکنم بشه کاری کرد همه اتفاقاتی که منجر به نرسیدن بسته های ارسالی میشه بعد از اینکه بسته ارسال شد رخ میده و شما کنترلی روش نداری
دلایل زیادی داره که بسته ها نمیرسن با کم کردن حجم بسته ها شاید، شاید وضعیت بهتر بشه
پروتکل TCP به خاطر کنترلی که روی صحت دریافت در مقصد داره بهتر عمل میکنه
این لینک دلایلشو شرح داده
http://www.mpls-experts.com/what-causes-packet-loss-on-the-internet/