PDA

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



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

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

از کدام توابع API بخصوصی استفاده کردید؟

mkbo_webmaster
دوشنبه 21 فروردین 1385, 18:06 عصر
تابع 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 کاراکتر از اون فایل رو بر میگردوند.
و با توجه به اینکه من قبلا در مورد بافرها اطلاعات بسیار کمی داشتم فهمیدم که اشکال از بافر هستش و یه جوری باید قبل از این قضیه اونو با کدی خاص و یا تغییر در کانکشن اینترنت افزایش داد ولی بلد نیستم چطوری

اینه اصل قضیه

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

mkbo_webmaster
دوشنبه 21 فروردین 1385, 19:16 عصر
مشکل من اینه که میخوام راهی برای افزایش مقدار بافر پیشفرض پیدا کنم.
با تکنیکهائی که شما میگید میشه مشکل خودتون رو حل کرد. ولی مشکل من این نیست.
لطفا اگه میشه دوباره سوالم رو بخونید و اگه کسی رو میشناسید که بلده ازش بپرسید.
حتما جبران میکنم

mkbo_webmaster
پنج شنبه 24 فروردین 1385, 19:07 عصر
من مشکلم تا حدودی حل شد.
فکر کنم تنها راه استفاده از VB .NET باشد.
متشکر

mkbo_webmaster
یک شنبه 27 فروردین 1385, 14:20 عصر
متاسفانه مشکل خودم رو خودم حل کردم.
کد پائین رو ببینید :


Dim a As New VB6.FixedLengthString(90000)






/

اَرژنگ
یک شنبه 27 فروردین 1385, 14:44 عصر
متاسفانه مشکل خودم رو خودم حل کردم.
کد پائین رو ببینید :/

چرا دیگه متاسفانه؟ کاشکی همه وقتی که جواب را پیدا میکنند مثل شما اینجا در اختیار همه قرار بدن که بقیه هم بتونند استفاده کنند.

mkbo_webmaster
یک شنبه 27 فروردین 1385, 15:48 عصر
من به این خیلی معتقدم که فقط خواننده نباشم !!!
اطلاعات مفیدمو همیشه به تاپیکها اضافه میکنم.

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




/

Payman62
یک شنبه 27 فروردین 1385, 21:12 عصر
mkbo_webmaster در مورد کدی که گذاشتی یه مقدار توضیح بده.

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

mkbo_webmaster
دوشنبه 28 فروردین 1385, 15:04 عصر
شما منظورتون توی VB6 هستش یا VB.Net ؟





/

Payman62
دوشنبه 28 فروردین 1385, 15:51 عصر
vb6 vb6 vb6

Payman62
سه شنبه 29 فروردین 1385, 00:18 صبح
من عجله دارم.

mkbo_webmaster
سه شنبه 29 فروردین 1385, 16:15 عصر
تو VB6 نمیشه ، خودمم موندم شما کسی رو نداری ازش بپرسیم.
ببخشید طول کشید.









/

Payman62
سه شنبه 29 فروردین 1385, 22:05 عصر
از هر کی میپرسم نمیدونه. چون معمولا کسی بیش از 65535 کاراکتر تو تکس باکس نمیریزه. Rich هم که سرعتش خیلی پایینه. با این حجم اطلاعات هم دو روز طول میکشه اطلاعاتو لود کنه.

plus
پنج شنبه 31 فروردین 1385, 04:19 صبح
باید ببینین کلا کلاس Edit یعنی همون TextBox توی ویندوز بیشتر از این تعداد کاراکتر رو ساپورت میکنه؟ یعنی تاحالا شما توی ویندوز دیدین یک TextBox بیشتر از این مقدار کاراکتر داخلش باشه؟

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

Payman62
پنج شنبه 31 فروردین 1385, 21:10 عصر
من که مشکلمو طبق معمول بعد از خوردن به بن بست با کلک رشتی حل کردم. ولی برای افزایش اطلاعات بد نیست رو CreateWindowEx کار کنیم. ببینیم به کجا میرسیم.

mkbo_webmaster
پنج شنبه 31 فروردین 1385, 22:57 عصر
حتما ، منم میرم بررسی کنم. نتیجه رو میگم.





/

mkbo_webmaster
شنبه 02 اردیبهشت 1385, 01:35 صبح
چیزی بدست نیوردم. شما چی ؟





/

Payman62
شنبه 02 اردیبهشت 1385, 17:48 عصر
منم نه .

mkbo_webmaster
شنبه 02 اردیبهشت 1385, 18:54 عصر
پس بهتره بی خیال این بحث بشیم.

موفق باشی





/