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

نام تاپیک: چطور میشه میزان بافر رو از 65535 بیشتر کرد ؟

  1. #1

    Exclamation چطور میشه میزان بافر رو از 65535 بیشتر کرد ؟

    من یه برنامه با VB6 و با استفاده از API نوشتم. و توی اون از توابع اینترنتی استفاده کردم.
    این توابع درست کار میکردن. تا زمانیکه من فهمیدم که خیلی از متنهای برگشتی من بصورت نصفه نیمه بر میگردن.
    روی چند مورد دیگه هم امتحان کردم، طول رشته ها رو بردم بالا و بعد امتحان کردم.
    در نهایت متوجه شدم که من هرچه متغیر بافر رو بالا ببرم، فایده ای نداره و حداکثر 65535 بایت رو جواب میده.
    قبلا در مورد حافظه RAM و بافرها چیزهائی شنیده بودم.
    ولی الان نمیدونم که توی عرصه اینترنت یا کامپیوتر چطور میشه میزان بافر رو از عدد 65535 بیشتر کرد ؟؟؟

  2. #2
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط mkbo_webmaster
    من یه برنامه با VB6 و با استفاده از API نوشتم. و توی اون از توابع اینترنتی استفاده کردم.
    این توابع درست کار میکردن. تا زمانیکه من فهمیدم که خیلی از متنهای برگشتی من بصورت نصفه نیمه بر میگردن.
    روی چند مورد دیگه هم امتحان کردم، طول رشته ها رو بردم بالا و بعد امتحان کردم.
    در نهایت متوجه شدم که من هرچه متغیر بافر رو بالا ببرم، فایده ای نداره و حداکثر 65535 بایت رو جواب میده.
    قبلا در مورد حافظه RAM و بافرها چیزهائی شنیده بودم.
    ولی الان نمیدونم که توی عرصه اینترنت یا کامپیوتر چطور میشه میزان بافر رو از عدد 65535 بیشتر کرد ؟؟؟
    از کدام توابع API بخصوصی استفاده کردید؟

  3. #3

    Unhappy من که دیگه قات زدم

    تابع InternetReadFile که مبدا فراخوانی آن از فایل wininet در ویندوز میباشد.

    فرم کلی :


    Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer


    من برای اینکه بتونم مثلا از آدرس اینترنتی فلان فایلهای html اون رو دریافت کنم. باید از این تابع بالا استفاده کنم. ولی یه مشکل بزرگی هست و اون هم وجود محدودیت دریافت بایت بوسیله آرگومانهای sBuffer و lNumBytesToRead در تابع هستش.

    مثلا من میخوام از سایت www.mkbo.com/index.asp کد html اون رو دریافت کنم.

    برای اینکار باید مقدار sBuffer رو که از نوع رشته ای هست. با 1000 عدد کاراکتر خالی پرکرده و مقدار lNumBytesToRead رو هم که از نوع long هستش رو 1000 بدم تا با هم مچ بشن.

    حالا اگه فایل مذبور رو بخوام با این حالت از اینترنت بگیرم. تنها 1000 کاراکتر اولش رو برخواهد گردوند.

    البته من یه کلک زدم و مثلا 1000 رو کردم 90000 که دیگه فکر نکنم فایل html ای توی اینترنت باشه که 90000 بایت ظرفیت داشته باشه.
    وقتی اینو میدادم. تنها تا 65535 کاراکتر از اون فایل رو بر میگردوند.
    و با توجه به اینکه من قبلا در مورد بافرها اطلاعات بسیار کمی داشتم فهمیدم که اشکال از بافر هستش و یه جوری باید قبل از این قضیه اونو با کدی خاص و یا تغییر در کانکشن اینترنت افزایش داد ولی بلد نیستم چطوری

    اینه اصل قضیه

  4. #4
    منم دیشب به یه مشکل شبیه همین مشکل برخوردم.
    میخواستم اطلاعات زیادی رو بریزم تو تکس باکس ولی فقط 65535 تا کاراکتر ازم قبول میکرد و بقیه اطلاعات وارد تکس باکس نمیشد. Maxlengh ش رو هم نمیشد بیشتر از این کرد. خواستم از Rich text box استفاده کنم. این مشکلو حل کرد ولی سر عت پایینش یه مشکل جدید بود. آخر سر یه آرایه گذاشتم و هر 60000 تا کاراکتر 60000 تا کاراکتر اطلاعات رو ریختم تو یه آرایه جدید و اطلاعات رو صفحه به صفحه نمایش دادم. حالا تکس باکس رو چی میشه حجم اطلاعات دریافتیش رو زیاد کرد؟

  5. #5
    مشکل من اینه که میخوام راهی برای افزایش مقدار بافر پیشفرض پیدا کنم.
    با تکنیکهائی که شما میگید میشه مشکل خودتون رو حل کرد. ولی مشکل من این نیست.
    لطفا اگه میشه دوباره سوالم رو بخونید و اگه کسی رو میشناسید که بلده ازش بپرسید.
    حتما جبران میکنم

  6. #6
    من مشکلم تا حدودی حل شد.
    فکر کنم تنها راه استفاده از VB .NET باشد.
    متشکر

  7. #7
    متاسفانه مشکل خودم رو خودم حل کردم.
    کد پائین رو ببینید :

    Dim a As New VB6.FixedLengthString(90000)






    /

  8. #8
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط mkbo_webmaster
    متاسفانه مشکل خودم رو خودم حل کردم.
    کد پائین رو ببینید :/
    چرا دیگه متاسفانه؟ کاشکی همه وقتی که جواب را پیدا میکنند مثل شما اینجا در اختیار همه قرار بدن که بقیه هم بتونند استفاده کنند.

  9. #9
    من به این خیلی معتقدم که فقط خواننده نباشم !!!
    اطلاعات مفیدمو همیشه به تاپیکها اضافه میکنم.

    دقیقا موافق این کلمه هستم :
    پیروزی از مال آن کسانی آست که شاید نتوانند، ولی پیکار میکنند، نه ازمال کسانی که میتوانند ولی خاموشند
    موفق باشید




    /

  10. #10
    mkbo_webmaster در مورد کدی که گذاشتی یه مقدار توضیح بده.

    آیا راهی است که بشه حجم تکس باکس رو هم زیاد کرد؟ تکس باکس هم تا 65535 کاراکتر میگیره. بعد از پر شدنش اگه چیزی توش تایپ کنی قبول میکنه و 65535 رو رد میکنه ولی اگه از طریق کد کاراکتری بهش اضافه کنی هیچ کاراکتری به ته تکس باکس افزوده نمیشه.
    مثلا کد " Text1.Text = Text1.Text & "Payman اگه تکس باکس 65535 تا کاراکترشو گرفته باشه چیزی به ته تکس باکس اضافه نمیکنه.

  11. #11
    شما منظورتون توی VB6 هستش یا VB.Net ؟





    /

  12. #12

  13. #13
    من عجله دارم.

  14. #14
    تو VB6 نمیشه ، خودمم موندم شما کسی رو نداری ازش بپرسیم.
    ببخشید طول کشید.









    /

  15. #15
    از هر کی میپرسم نمیدونه. چون معمولا کسی بیش از 65535 کاراکتر تو تکس باکس نمیریزه. Rich هم که سرعتش خیلی پایینه. با این حجم اطلاعات هم دو روز طول میکشه اطلاعاتو لود کنه.

  16. #16
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    اصفهان
    پست
    1,436
    باید ببینین کلا کلاس Edit یعنی همون TextBox توی ویندوز بیشتر از این تعداد کاراکتر رو ساپورت میکنه؟ یعنی تاحالا شما توی ویندوز دیدین یک TextBox بیشتر از این مقدار کاراکتر داخلش باشه؟

    اگه بشه اونوقت با تابع ای پی آی CreateWindowEx میشه یک همچین تکست باکسی درست کرد...

  17. #17
    من که مشکلمو طبق معمول بعد از خوردن به بن بست با کلک رشتی حل کردم. ولی برای افزایش اطلاعات بد نیست رو CreateWindowEx کار کنیم. ببینیم به کجا میرسیم.

  18. #18
    حتما ، منم میرم بررسی کنم. نتیجه رو میگم.





    /

  19. #19
    چیزی بدست نیوردم. شما چی ؟





    /

  20. #20

  21. #21
    پس بهتره بی خیال این بحث بشیم.

    موفق باشی





    /

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

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