نمایش نتایج 1 تا 3 از 3

نام تاپیک: دریافت نادرست داده ها از طریق سوکت - نداخل بسته ها

  1. #1
    کاربر دائمی آواتار saied_hacker
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    404 Not Found
    پست
    703

    دریافت نادرست داده ها از طریق سوکت - نداخل بسته ها

    سلام

    این یه برنامه است که سرور و کلاینت یکسری مکالماتی با هم دارن، در حالت عادی ( تعداد کم درخواست ها و پاسخ ها به خوبی کار میکنه ) اما وقتی سرور میخاد تعداد زیادی بسته رو پشت سر هم ارسال کنه توی کلایت مشکل پیش میاد و بسته ها قاطی میشن.
    برای مثال این یک ارسال و دریافت بین سرور و کلاینت هست که سایز هربسته مشخص شده.

     send ---------- 496 received ---------- 496
    send ---------- 613
    received ---------- 613
    send ---------- 680
    received ---------- 680
    send ---------- 227
    send ---------- 697
    received ---------- 227
    send ---------- 722
    send ---------- 710
    received ---------- 697
    received ---------- 1432



    از داده های بالا مسخص میشه که دو تا ارسال اخری که سرور انجام داده با سایز های 722 و 710 ( سایزش شده 1432 ) با هم دریافت شدن و اینجوری داده ها نامعتبر شده و به درد نمی خورن.
    دوستان راه حلی برای این مشکل ندارن ؟؟؟

    این کد برای دریافت در کلاینت هست :
    private void ReceiverCallBack(IAsyncResult ar)        {
    try
    {
    int size = _socket.EndReceive(ar);
    _socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiverCallBack), null);


    System.Diagnostics.Trace.WriteLine(" received ---------- " + size.ToString());




    if (MessageReceived != null)
    {
    byte[] temp = new byte[size];
    Array.Copy(_buffer, temp, size);


    MessageReceived(temp);
    }
    }
    catch (Exception exp)
    {
    // :)
    }


    }




    و این هم ارسال در سرور :

    public bool SendMessage(Socket socket, byte[] message, string logMessage = "Unknow")        {
    try
    {
    MsgTemp msg = new MsgTemp(socket, logMessage, message);


    System.Diagnostics.Trace.WriteLine(" send ---------- " + message.Length.ToString());


    socket.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(SendCallBack), msg);
    return true;
    }
    catch
    {
    // :)
    }
    return false;
    }



    پیشاپیش متشکرم

  2. #2
    کاربر دائمی آواتار hadi0x7c7
    تاریخ عضویت
    فروردین 1391
    محل زندگی
    تهران
    سن
    32
    پست
    497

    نقل قول: دریافت نادرست داده ها از طریق سوکت - نداخل بسته ها

    البته من از این کد چیزی نفهمیدم، ولی شما چرا دریافت سمت کلاینت رو مثلا توی حلقه ای چیزی نمیزارید که که کامل اون بسته(؟) یا هر چیزی رو کامل دریافت کنه و کافیه کدش اونقسمت که بافر رو پر می کنه افست رو 0 ندید، بلکه اون مقدار چیزی که تا الان دریافت شده قرار بدین. البته فرض بر اینه که شما سایز اطلاعات دریافتی رو میدونید.

  3. #3
    کاربر دائمی آواتار saied_hacker
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    404 Not Found
    پست
    703

    نقل قول: دریافت نادرست داده ها از طریق سوکت - نداخل بسته ها

    مشکل حل شد

    ممنون اقای hadi0x7c7 مشکل این بود که من اصلا نمی دونستم با TCP ممکنه این مشکل پیش بیاد و چون قبلا کارای کوچیک تری کرده بودم با این مشکل مواجه نشده بودم :)
    اینجا چون ممکنه چند تا ارسال پشت سر هم باشه با این مشکل موجه شدم
    به هر حال اینجا به خوبی توضیخ داده
    Simple Message Framing Sample for TCP Socket

تاپیک های مشابه

  1. سوال در مورد طریقه دریافت یک ورودی از طریق سوکت
    نوشته شده توسط perkas در بخش Android Studio
    پاسخ: 1
    آخرین پست: دوشنبه 19 اسفند 1392, 15:25 عصر
  2. ارسال و دریافت داده در برنامه نویسی سوکت
    نوشته شده توسط amin_sltny در بخش C#‎‎
    پاسخ: 7
    آخرین پست: جمعه 18 اسفند 1391, 21:10 عصر
  3. اتصال به mysql از طریق سوکت !!!
    نوشته شده توسط Milad در بخش PHP
    پاسخ: 8
    آخرین پست: جمعه 25 بهمن 1387, 23:18 عصر
  4. پاسخ: 9
    آخرین پست: شنبه 30 دی 1385, 09:14 صبح
  5. نصب پایگاه داده sql از طریق دلفی
    نوشته شده توسط ali512 در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 8
    آخرین پست: شنبه 26 آذر 1384, 16:37 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •