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

نام تاپیک: کجا باید از ServerSocketChannel و کجا از serverSocket استفاده کنیم

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #14
    کاربر دائمی آواتار ahmad.mo74
    تاریخ عضویت
    مرداد 1393
    محل زندگی
    تهران
    پست
    437

    نقل قول: کجا باید از ServerSocketChannel و کجا از serverSocket استفاده کنیم

    سلام، شما لطف داری :)

    گفتم که بیشترشو از اون pdf کمک گرفتم...

    فقط یه نکته مهمی رو حواست باشه وقتی در حالت معمولی از socket چیزی میخونیم تا زمانی که دیتا کامل به دستمون نرسیده متد ()read عددی بزرگتر از 0 بهمون برمیگردونه و فقط موقعی 0 برمیگردونه که اطلاعات کامل بهمون برسه
    اما وقتی داریم از non-blocking io استفاده میکنیم قضیه فرق میکنه، چون کار read و write میتونن به طور همزمان انجام بشن ممکنه متد ()read عدد 0 بهمون برگردونه در حالی که هنوز اطلاعات کامل به دستمون نرسیده، برای داده های کم حجم کم اتفاق میفته که قبل از اتمام 0 برگردونه ولی اگر دیتا از سایز بافر بیشتر باشه این احتمال هست، روشی های مختلفی برای جلوگیری از این مشکل هست مثلا اینکه از قبل سایز رو به طرف مقابل بفرستیم تا بدونه تا کجا باید read کنه یا اینکه انتهای فایل رو مشخص کنیم (بیشتر زمانی که String میفرستیم کاربرد داره) مثلا من خودم اینکارو میکنم، یعنی وقتی چیزی میفرستم آخرش
    \n\r
    اضافه میکنم :

            private static final String EOF = "\n\r";



    private String read(SelectionKey key) {
    SocketChannel channel = (SocketChannel) key.channel();
    StringBuilder sb = new StringBuilder();
    ByteBuffer readBuffer = ByteBuffer.allocate(DEFAULT_BUFFER_SIZE);
    CharsetDecoder decoder = StandardCharsets.UTF_8.newDecoder();
    CharBuffer charBuffer;
    int read;
    try {
    do {
    read = channel.read(readBuffer);
    if (read == -1) {
    resetKey(key);
    return null;
    }
    readBuffer.flip();
    charBuffer = decoder.decode(readBuffer);
    sb.append(charBuffer.array());
    readBuffer.clear();
    } while (sb.lastIndexOf(EOF) == -1);
    } catch (IOException e) {
    resetKey(key);
    return null;
    }
    sb.delete(sb.lastIndexOf(EOF), sb.length());
    return String.valueOf(sb);
    }
    آخرین ویرایش به وسیله ahmad.mo74 : پنج شنبه 08 آبان 1393 در 11:47 صبح

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

  1. برای سوکت نویسی از کجا باید شروع کرد؟؟؟؟؟
    نوشته شده توسط AlirezaBahredar در بخش برنامه نویسی در Delphi
    پاسخ: 4
    آخرین پست: پنج شنبه 06 دی 1386, 10:05 صبح
  2. از کجا باید شروع کرد؟
    نوشته شده توسط Majid76 در بخش PHP
    پاسخ: 13
    آخرین پست: شنبه 26 خرداد 1386, 20:09 عصر
  3. من از کجا باید شروع کنم ؟
    نوشته شده توسط shab navard در بخش ASP.NET Web Forms
    پاسخ: 7
    آخرین پست: دوشنبه 17 اسفند 1383, 11:40 صبح
  4. این سوال رو کجا باید بپرسم ؟
    نوشته شده توسط mehdi_moosavi در بخش گفتگو با مسئولین سایت، درخواست و پیشنهاد
    پاسخ: 1
    آخرین پست: چهارشنبه 30 دی 1383, 10:10 صبح
  5. MDAC رو از کجا باید پیدا کنم
    نوشته شده توسط archi در بخش برنامه نویسی در 6 VB
    پاسخ: 1
    آخرین پست: جمعه 03 بهمن 1382, 12:05 عصر

برچسب های این تاپیک

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

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