morteza.m
پنج شنبه 30 مهر 1394, 00: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 پر شده (جهت استفاده های بعدی)
ممنون میشم کمکم کنید.
یه 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 پر شده (جهت استفاده های بعدی)
ممنون میشم کمکم کنید.