PDA

View Full Version : انتخاب بهترین الگوریتم برای ارسال داده با تعداد دفعات زیاد؟



one hacker alone
یک شنبه 06 مرداد 1392, 02:24 صبح
با یاد خدا
سلام دوستان
یه برنامه تحت شبکه داریم که میخوایم که با پورت 80 به یه سایت متصل بشیم و پارامتر id اون سایت رو با اعداد مثلا 1 تا 1000 مقدار بدیم و جواب بگیریم
حالا سوال اینه
ما میتونیم یک کنترل winsock اضافه کنیم و با یک حلقه یک تا 1000 هر سری داده بفرستیم و بگیریم
یا
اینکه ارایه ای از این کنترل ایجاد کنیم به تعداد 1000 تا
اما نمیدونم کدوم یک بهینه تر هست
نظرتون رو میخواستم با دلیل در این مورد بدونم

vbhamed
یک شنبه 06 مرداد 1392, 12:59 عصر
سلام
به نظر من بهتره يك فايل php بنويسي روي هاست بزاري كه اون خودش اعداد مورد نظر رو به Page بده و جوابها رو بگيره و يكجا براي شما ارسال كنه
مي‌توني اعداد رو به فايل php به صورت رنج بفرستي البته اگر پشت سر هم هستن، اگر هم نه از طريق آپلود يك فايل يا با متد POST

البته اينكارها در صورتي قابل انجام هست كه اون هاست از خودتون باشه، ولي اگر هم اون هاست از خودتون نيست ولي هاست ديگه داريد بازم فايل php رو روي هاست خودتون ايجاد كنيد و از اون طريق اينكار انجام بشه بهتره

one hacker alone
یک شنبه 06 مرداد 1392, 15:07 عصر
خب این چیزی که شما گفتین یعنی کل کار رو بندازیم رو دوش php دیگه یعنی من این پروژه رو تو php انجام بدم
راستش به این موضوع فکر نکرده بودم اما خب از اونجا که برنامه app در دسترس تر هست خواستم این رو بنویسم
حالا بین دو حالتی که گفتم تو انتخاب موندم که کدام یک از روش ها درست تر هست درضمن من تمام پاسخ هارو ذخیره نمیکنم فقط برخی از اونها که طول رشته ی برگشتی از مقداری بیشتر باشه ذخیره میکنم که اون بحثش جداست و مشکی نداره

m.4.r.m
یک شنبه 06 مرداد 1392, 16:09 عصر
به نظر من آرایه کارتو راحت تر می کنه و بعدا هم خواستی یک خانه از آرایه رو بخونی راحت تری و دسترسی مستقیم داری می تونی به تابع با روش ارجاع درست کنی و لیست ها رو از طریق آرایه و ارجاع ارسال کنی که سرعتشم زیاده

one hacker alone
یک شنبه 06 مرداد 1392, 17:31 عصر
تو این حالتی که شما میگین من یکم به مشکل برخوردم
ببینید من باید یه حلقه داشته باشم که اینا رو مقدار دهی کنه یعنی رشته رو بر اساس یک آیدی تنظیم کنه و بفرسته براي یه سوکت که کارش رو بکنه اما نکته اینه که باوجود اینکه ما DataArrival رو با یه متغیر عددی ایندکس میکنیم اما برام گنگ هست که چجوری اینا رو مدیریت کنم یعنی برای نوشتن کدش مشکل دارم
فرم لود میاد کانکت میکنه

w.Connect "host", 80


اینم یه تابع که بسته رو تنظیم میکنه و میفرسته


Private Sub senddata()
Dim header As String
header="x"
w.senddata header
End Sub

اینم یه ارایه به طول مثلا 10
Private w(10) As Winsock
این کد دریافت که با شرایط خاصی تو لیست باکس میریزه اون ای دی های بدرد بخور رو

Private Sub w_DataArrival(i As Integer,ByVal bytesTotal As Long)
Dim strtxt As String
w.GetData strtxt, vbString
if........
l.AddItem strtxt
End Sub


حالا این هدر قسمت id متغیر هست
براي همین من اومدم تو کد شروع یه حلقه نوشتم از اون بازه ای که ای دی ها هست
بعد هم هر سری میاد تابع سند رو فراخوانی میکنه
اما مشکلی که داره خطا میده میگه بافر ارسال پر شده
من الان تو مدیریت تعداد آی دی ها با آرایه وین سوک مشکل دارم
یعنی میخوام بدونم اگه 1000000 تا هم آی دي باشه همین اندازه آرایه وینسوک بسازم؟

vbhamed
یک شنبه 06 مرداد 1392, 17:32 عصر
خب این چیزی که شما گفتین یعنی کل کار رو بندازیم رو دوش php دیگه یعنی من این پروژه رو تو php انجام بدم
راستش به این موضوع فکر نکرده بودم اما خب از اونجا که برنامه app در دسترس تر هست خواستم این رو بنویسم
حالا بین دو حالتی که گفتم تو انتخاب موندم که کدام یک از روش ها درست تر هست درضمن من تمام پاسخ هارو ذخیره نمیکنم فقط برخی از اونها که طول رشته ی برگشتی از مقداری بیشتر باشه ذخیره میکنم که اون بحثش جداست و مشکلی نداره

سلام
در هر حال برنامه شما كه بايد با اينترنت كار كنه، قرار هم هست پردازش روي سرور انجام بشه، پس فراخواني هم همونجا باشه فكر كنم راحت تري ديگه
ضمنا وقتي استفاده از php مناسب كار شما باشه لازم نيست حتما با windows app انجام بشه، البته در صورتي كه مشكلات امنيتي و ... پيش نياد
اگر هم بتونيد پردازشي كه روي سرور انجام ميشه رو روي ويندوز انجام بديد خب بهتره كه برنامه هم windows app باشه

one hacker alone
دوشنبه 07 مرداد 1392, 15:27 عصر
خب ببینید من به اون هاست دسترسی ندارم حالا اگه بخوام رو یه هاست دیگه انجام بدم باز هم اونجا درگیر هم مسائل هستم یعنی من باید برم سوکت نویسی با php انجام بدم و مشکلات کماکان پا بر جاست
من میخوام این رو با vb انجام بدم چون بهش نیاز دارم
اگه راهنمایی بفرمایید ممنون میشم

m2011kh
سه شنبه 08 مرداد 1392, 18:21 عصر
اگه بخواید داده ها رو با یه وینساک بفرستید و بگیرید کمی درد سر بیشتری دارید به خاطر مشکلات و محدودیت هایی که وینساک داره.امّا اگه بخواید آرایه ای از ویساک ایجاد کنید مسلماً منابع بیشتری از سیستم رو اشغال میکنه،منتها الان مثل گذشته نیست و کسی برای همچین چیزی محدودیت حافظه نداره.تا اینجا آرایه ای از وینساک ها فکر بهتری هست.

برای شروع شما یک وینساک روی فرم ایجاد کن به اسم WinSK و Index اون رو 0 بزار.و میتونی با این کد آرایه از وینساک هارو ایجاد کنی:
Dim InDexs as integer
for i = 1 to 1000
load winsk(i)
next i
برای فرستادن اطلاعات با این آرایه وینساک.

Dim InDexs as integer
for i = 0 to 1000
winsk(i).Senddata Data
next i

فعلا در شرایط مناسبی نیستم.در اولین فرصت اطلاعات بیشتری در اختیارتون میزارم .

موفق و سربلند باشید.

MMD

m2011kh
چهارشنبه 09 مرداد 1392, 08:44 صبح
خب سلام دوباره.

درباره گرفتن اطلاعات هم تکه کدی میزارم براتون.البته هر چیزی که میگم Base کار هست و شما با توجه به جزئیات کارتون از اینها استفاده کنید:
اول یه لیست باکس به اسم Lst ایجاد و برای رویداد Dataarrival وینساکتون این کد رو بنویسید:
Private Sub Winsk_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strdata as string
winsk(index).getdata strdata
lst.additem strdata
End Sub

این کد هر دیتایی که از هر وینساکی دریافت بشه به لیست اضافه میکنه.

موفق و سربلند باشیذ.

MMD