# Native Code > برنامه نویسی در 6 VB > برنامه نویسی مرتبط با شبکه و وب در VB6 >  میزان واقعی Send & Receive

## daniyal_1363

سلام
اول سال 1389 رو به همگی تبریک میگم

همه ی پست های قبلی رو مرو کردم ولی نتونستم مطلبی درست و حسابی در مورد میزان Send و Receive تو VB6 پیدا کنم.

تو این دوره به خاطر محدودیت دانلود در اشتراک های ADSL لازمه که نرم افزارهایی ساخته بشه تا میزان Send و Receive واقعی رو مشخص کنه و در بعضی قسمت ها که نیاز به ایجاد محدودیت داره این کار رو انجام بده.

دو نمونه کد براتون ضمیه میکنم که خودم چیز زیادی ازش نفهمیدم ، در اصل یه مشکل داره اونم اینکه میزان واقعی رو نشون نمیده(بیشتر از حد معمول نشون میده)

دوستان کمک کنن تا این مشکل حل بشه

اگه کسی بتونه یه توضیح کامل در مورد چطوری کار کردن برنامه هم بده خیلی خیلی ممنون میشم

سال خوبی را برای همه ی شما آرزو میکنم :چشمک:  :بوس:  :لبخند:

----------


## daniyal_1363

یکی نیست به داد ما برسه - آقایون مهندسین تا حالا جواب درستی در این مورد داده نشده اگه کمک کنین یکی از پر کاربردترین تایپیک ها میشه در آینده

----------


## daniyal_1363

اینم نمونه کد با استفاده از API هست که من بازم نفهمیدم چرا مشکل داره -- Plzzz Heeellllllpppp :گریه:  :افسرده: 

Public Structure RAS_STATS
Public dwAlignmentErr As Integer
Public dwBps As Integer
Public dwBufferOverrunErr As Integer
Public dwBytesRcved As Integer
Public dwBytesXmited As Integer
Public dwCompressionRatioIn As Integer
Public dwCompressionRatioOut As Integer
Public dwConnectionDuration As Integer
Public dwCrcErr As Integer
Public dwFramesRcved As Integer
Public dwFramesXmited As Integer
Public dwFramingErr As Integer
Public dwHardwareOverrunErr As Integer
Public dwSize As Integer
Public dwTimeoutErr As Integer
End Structure
'http://www.pinvoke.net/default.aspx/rasapi32.RasGetConnectionStatistics
'<DllImport("rasapi32.dll", CharSet:=CharSet:Auto)> _
'Public Shared Function RasGetConnectionStatistics( _
'ByVal hRasConn As IntPtr, _
'ByRef lpStatistics As RAS_STATS) As UInt32
'End Function

Public Declare Auto Function RasGetConnectionStatistics Lib "rasapi32.dll" _
Alias "RasGetConnectionStatistics" ( _
ByVal hrasconn As IntPtr, _
ByRef lpStatistics As RAS_STATS) As UInt32

Public Function Received()
'RAS_STATS statistics = new RAS_STATS();
'statistics.dwSize = Marshal.SizeOf(statistics);
'uint retVal = RasGetConnectionStatistics(rasConnectionHandle, ref statistics);

Dim Stat As New RAS_STATS
Stat.dwSize = 256
Dim retVal As UInt32 = RasGetConnectionStatistics(0, Stat)
Received = Stat.dwBytesRcved
End Function

----------


## HjSoft

من فکر کنم اینا واقعیت رو نشون بدن ، و ویندوز مشکل داره ... البته این نظر منه ، چون خیلی از این ها رو تست کردم ، همه مغایر با ویندوز اند !!
هر کی بلده بگه ، نیاز فوری داریم !

----------


## daniyal_1363

> من فکر کنم اینا واقعیت رو نشون بدن ، و ویندوز مشکل داره ... البته این نظر منه ، چون خیلی از این ها رو تست کردم ، همه مغایر با ویندوز اند !!
> هر کی بلده بگه ، نیاز فوری داریم !


 
اگه تست کنین می بینین که واقعیت رو نشون نمیده 

وقتی سایتی باز نیست و هیچ نرم افزازی نباشه که از اینترنت استفاده کنه Receive تغییری نمیکنه ولی وقتی فایلی با حجمش مشخص رو دانلود کنید می بینید که تقریبا 3 برابر حجم فایل Receive نشون میده

----------


## daniyal_1363

مثل اینکه نمیخواد کسی به داد ما برسه  :گریه: 


کسی نمیدونه عدد های Send و Receive یک کانکش رو چه جوری میشه استخراج کرد ؟

----------


## daniyal_1363

کس نخوارد پشت من جز ناخن انگشت من 



Private Declare Function RasEnumConnections Lib "rasapi32" Alias "RasEnumConnectionsA" (ByVal lprasconn As Long, ByVal lpcb As Long, ByVal lpcConnections As Long) As Long
Private Declare Function RasGetConnectionStatistics Lib "rasapi32" (ByVal hRasConn As Long, ByVal lpStatistics As Long) As Long
Private Type RASCONN
    dwSize As Long
    hRasConn As Long
    szEntryName(0 To 256) As Byte
    szDeviceType(0 To 16) As Byte
    szDeviceName(0 To 128) As Byte
    pad As Byte
End Type
Private Type RAS_STATS
    dwSize As Long
    dwBytesXmited As Long
    dwBytesRcved As Long
    dwFramesXmited As Long
    dwFramesRcved As Long
    dwCrcErr As Long
    dwTimeoutErr As Long
    dwAlignmentErr As Long
    dwHardwareOverrunErr As Long
    dwFramingErr As Long
    dwBufferOverrunErr As Long
    dwCompressionRatioIn As Long
    dwCompressionRatioOut As Long
    dwBps As Long
    dwConnectDuration As Long
End Type
Private Sub Form_Load()
    Dim conn As RASCONN
    Dim stat As RAS_STATS
    Dim y As Long, z As Long
        
    conn.dwSize = Len(conn)
    y = conn.dwSize
    
    
    If RasEnumConnections(VarPtr(conn), VarPtr(y), VarPtr(z)) = 0 Then
        stat.dwSize = Len(stat)
        If RasGetConnectionStatistics(conn.hRasConn, VarPtr(stat)) = 0 Then
            Debug.Print stat.dwAlignmentErr
            Debug.Print stat.dwBps
            Debug.Print stat.dwBufferOverrunErr
            Debug.Print stat.dwBytesRcved
            Debug.Print stat.dwBytesXmited
            Debug.Print stat.dwCompressionRatioIn
            Debug.Print stat.dwCompressionRatioOut
            Debug.Print stat.dwConnectDuration
            Debug.Print stat.dwCrcErr
            Debug.Print stat.dwFramesRcved
            Debug.Print stat.dwFramesXmited
            Debug.Print stat.dwFramingErr
            Debug.Print stat.dwTimeoutErr
        End If
    End If
    MsgBox stat.dwBytesRcved
End Sub


این تابع RAS بالا به صورت درست و بدون خطا - خواهش میکنم اگه چیزی به نظرتون میرسه بگین (قطره قطره جمع گردد وانگی کد اصلی شود)

ولی مقدار بازگشتیش صفره

----------


## daniyal_1363

اینم یه نمونه ساده تر دیگه ( ولی عددش نمیدونم چیه ؟ بلد نیستم خوب) شما بگین اگه بلدین



لیبل پایین صفحه مقدار رسیو رو میگه

----------


## daniyal_1363

آقایون مدیرها کجایید به داد ما برسید ، از دوستانی که میدونن قضیه چیه کسی نیست کمک کنه ؟

تو یه سایت هندی زبان چیزای زیادی در مورد شبکه و Send و Receive زده بود ولی به خاطر زبان هندیش من چیزی نفهمیدم 

اگه Ocx فروشی هم باشه من خریدارم ، کارم خیلی گیره  :گریه:

----------


## Black_Strom

ببین عزیزم من 2 سال پیش نرم افزاری طراحی کردم اونم برای محیط های ویستا و xp

طبق سفارش مشتری قرار شد میزان دانلود را بر حسب نرخی که اعلام شده بود محاسبه و علاوه بر هزینه ساعت مشتری محاسبه نماید
اون نرم افزار ساخته شد تمام شد رفت
اینا فقط بهت بگم که میزان اطلاعات دریافتی و ارسالی را باید بر حسب درصد خاصی که با آزمون و خطا بدست می یاد محاسبه کنی 
البته اشتباه که اطلاعات را باهم جمع ببندی که معمولا همه این کارو می کنن
اینجا نمی توانم جواب بدم یه سری به وبلاگ من بزن ...
 :قلب:   :بوس:

----------


## Black_Strom

یه نکته دیگه
اون زمان همهخ داشتن با نرم افزار radmin  کار می کردن
که من تونستم به صورت مستقل اونم برای محیط ویستا تمامی امکانات یک نرم افزار حرفه ای مانند
remote monitor
remote command
send resiver accounting
accounting customer
 و حتی تلاش اخرم
voip  بود
را انجام بدم

اما این نکته را به همه عزیزان می گم پروتکل udp  پروتکل بی عیب و نقصیه اگه خوب باهاش کار کننین فقط اگه تعداد سیستم ها کم باشه تاکید می کنم تعداد سیستم ها کم باشه حدود 15 تا سیستم

الان 3 ساله نرم افزاری که واسه کافی نت شخص دیگه ای طراحی کردم داره کار می کنه و جالبه بدونید که با پروتکل udp  کار شده

----------


## daniyal_1363

> یه نکته دیگه
> اون زمان همهخ داشتن با نرم افزار radmin کار می کردن
> که من تونستم به صورت مستقل اونم برای محیط ویستا تمامی امکانات یک نرم افزار حرفه ای مانند
> remote monitor
> remote command
> send resiver accounting
> accounting customer
> و حتی تلاش اخرم
> voip بود
> ...


 
از اینکه بلاخره یکی در این مورد اطلاعاتی داره واقعاً خوشحالم 

میشه توضیح بیشتر بدین - این رو توی کد ها فهمیدم که نباید تمامی رقم ها رو با هم جمع زد ولی نمیدونم این اعداد  چه جوری میشه تک تک بدست آورد - در اصل سند و رسیو چند قسمت با هم جمع زده میشه ولی نمیدونم چه قسمت هایی و در کجا ؟ :اشتباه:

----------


## daniyal_1363

مثل اینکه دوستمون حرفش فقط در حد یه حرف بود. دارم به یه جاهایی میرسم  :چشمک: 

میگن جوینده یابندس

یه توضیح :

برای پیدا کردن میزان Send و Receive فقط باید اعداد مربوط به سخت افزاری اخراج بشه که اتصال از طریق اون صورت گرفته 

حالا باید اطلاعاتمون رو در این باره زیاد کنیم، اگه کسی اطلاعات در این مورد داره خواهش دریغ نکنه

----------


## daniyal_1363

سلام بر دوستان عزیز

با توجه به تار عنکبوت گرفتن این تایپیک باید از دوست عزیزمون (* Mr'Jamshidy* ) به خاطر تغییر و تلاش برای رفع مشکلات قبلی و حل مسئله تشکر کنیم.

خوب آقای (*Mr'Jamshidy*) کدهای اولیه که در اولین پست گذاشتیم رو تغییر دادن و Send و Receive یک کانکشن بخصوص رو اندازه میگیرن (البته اگه درست متوجه شده بودم - اگه خودشون زحمت بکشن و توضیح بدن خیلی بهتره)

البته من این کد ها رو سیستم تست کردم و نتیجه باز هم درست از آب در نیومد

مشکل : مشکل این کد همون مشکلی که موضوع تایپیکه یعنی "میزان واقعی Send & Receive "، این کد هم میزان دقیق Send & Receive رو نمیده

میتونین با دانلود کردن یک فایل که حجمش مشخصه امتحان کنید.

فایل جدید ضمیمه شد.

----------


## Mr'Jamshidy

سلام

ببینید دوستان در این زمینه من توضیحات کوتاهی میدم شما خودتون دیگه دنبالش  باشید یا به عنوان دیگه من سرنخ رو میدم دیگه باقیش با خودتون

این سورس که من هم ننوشتمش و تغییر کوچکی توش ایجاد کردم کارش اینه که یکی  از درایور ها رو اسنیف میکنه و تبادل پروتوکل رو به شما اعلام میکنه

وقتی برنامه رو داخل ویبی اجرا میکنید (فایل j.vbp) و اجراش میکنید فرمی به شما نمایش داده میشه که داخلش یک کمبو و دو تا باتون هست

داخل کمبو درایور هایی که به سیستم شما معرفی شده لیست میشه و اگر شما یکی  از اون ها رو انتخواب کنید و OK کنید همون درایوری که انتخواب کردید اسنیف  میشه و پاکت هایی که از طریق اون درایور تبادل میشه به شما گزارش میشه




> خوب آقای (*Mr'Jamshidy*)  کدهای اولیه که در اولین پست گذاشتیم رو تغییر دادن و Send و Receive یک  کانکشن بخصوص رو اندازه میگیرن (البته اگه درست متوجه شده بودم - اگه  خودشون زحمت بکشن و توضیح بدن خیلی بهتره)


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

به عنوان مثال درایور هایی که تو سیستم من لیست شده ایناس

WAN Miniport (IPv6) 
WAN Miniport (Network Monitor) 
Realtek RTL8168B/8111B Family PCI-E Gigabit Ethernet NIC (NDIS 6.20)-QoS Packet Scheduler-0000 
Realtek RTL8168B/8111B Family PCI-E Gigabit Ethernet NIC (NDIS 6.20)-WFP LightWeight Filter-0000 
WAN Miniport (IP) 
Realtek RTL8168B/8111B Family PCI-E Gigabit Ethernet NIC (NDIS 6.20)-BitDefender Firewall NDIS6 Filter Driver-0000 
Realtek RTL8168B/8111B Family PCI-E Gigabit Ethernet NIC (NDIS 6.20) 
WAN Miniport (IPv6)-QoS Packet Scheduler-0000 
WAN Miniport (IPv6)-BitDefender Firewall NDIS6 Filter Driver-0000 
WAN Miniport (IP)-QoS Packet Scheduler-0000 
WAN Miniport (IP)-BitDefender Firewall NDIS6 Filter Driver-0000 
WAN Miniport (Network Monitor)-QoS Packet Scheduler-0000 
WAN Miniport (Network Monitor)-BitDefender Firewall NDIS6 Filter Driver-0000 
VMware Virtual Ethernet Adapter for VMnet1 
VMware Virtual Ethernet Adapter for VMnet8 
WAN Miniport (PPPOE) 
RAS Async Adapter 
Broadband Connection 
Software Loopback Interface 1 
WAN Miniport (SSTP) 
WAN Miniport (IKEv2) 
WAN Miniport (L2TP) 
WAN Miniport (PPTP) 
Microsoft ISATAP Adapter 
Microsoft 6to4 Adapter #2 
Microsoft 6to4 Adapter 
Teredo Tunneling Pseudo-Interface 
Microsoft ISATAP Adapter #2 
Microsoft 6to4 Adapter #15 
Microsoft 6to4 Adapter #4 
Microsoft 6to4 Adapter #3 
Microsoft 6to4 Adapter #7 
Microsoft 6to4 Adapter #5 
Microsoft 6to4 Adapter #6 
Microsoft 6to4 Adapter #9 
Microsoft 6to4 Adapter #8 
Microsoft 6to4 Adapter #10 
Microsoft 6to4 Adapter #14 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 
Microsoft 6to4 Adapter #11 

خوب حالا ما اگر این درایور ها رو بشناسیم میتونیم بفهمیم که پاکت های مد نظر ما از طریق کدوم درایور داره تبادل میشه!!
به عنوان مثال میشه گفت اگر من هر کدوم از گزینه های زیر رو انتخواب کنم  نتیجه این میشه که تعداد پاکت هایی که به اینترنت فرستاده یا دریافت شده  ((فقط اینترنت)) به من گزارش میشه

Broadband Connection
WAN Miniport (PPPOE)

به یقین همه از کانکشن برای اینترنت استفاده نمیکنن مثل من پس WAN Miniport (PPPOE) در اینجا بهترین گزینس

حالا شما باید بگردید ببینید اگر این WAN Miniport (PPPOE) تو همه سیستم ها  ثابت بود که خوب مشکل حله با اسنیف کردن این یک مورد دیگه نیازی به این  همه بگیر ببند نیست در غیر اینصورت باید درایور اصلی رو پیدا کنید

حالا من اگر مثلا بیام و درایور لن رو انتخاب کنم چی میشه؟

خوب همه پاکت هایی که از طریق این درایور جا به جا میشه به من گزارش میشه!!!
پس یعنی حتی اطلاعاتی که بین دو تا کامپیوتر تو شبکه هم جا به جا میشه به من میگه که فکر نمیکنم کسی اینو بخواد

دیگه فکر کنم کافیه

در ضمن این سورس طوری نوشته شده که نوع پروتوکل هم به شما میگه (تو فرم اصلی خاصیت Caption)

مثلا چیزایی که مربوط به اینترنتم باشه مینویسه PPP
کارت شبکه Ethernet
و ...

خوب موفق باشید

----------


## Mr'Jamshidy

> میتونین با دانلود کردن یک فایل که حجمش مشخصه امتحان کنید.


دوست عزیز شما زمانی که 100% اطمینان داشتید که چیز دیگه روی سیستم ما از اینترنت استفاده نمیکنه میتونید این حرف رو بزنید اما متاسفانه در هر لحظه خیلی چیزا روی سیستم دارن از اینترنت استفاده میکنن

من با این که به هیچ نرم افزاری اجازه نمیدم از اینترنت استفاده کنن اما بازم میبینم که گه گاهی دارن یک سیخی به اینترنت میزنن حتی کوچک

----------


## daniyal_1363

سلام

فکر میکنم یه جای کار مشکل داره

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

توسط یه نرم افزار دانلودر (Orbit) یک فایل که حجم مشخصی داره رو دانلود میکنم 

ولی نرم افزار دانلودر هنور 1Mb بیشتر دانلود نکرده نرم افزار ما حدود 3Mb نمایش میده ، تمامی کانکش ها رو هم تست کردم همه همین مقدار رو برمیگردونن

در ضمن من وقتی یه کانکشن غیر فعال (Disable) رو هم انتخاب می کنم مثل (Bluetooth Device (RFCOMM Protocol TDI) باز هم در زمان دانلود ، عددش بالا میره در صورتی که من اصلاٌ از این کانکشن استفاده نمیکنم

و اینکه سرعت دانلود من توی نرم افزار دانلودرم 20 تا 25 کیلوبایته (این آخر سرعت دانلودمه) ولی سرعت دانلود در این نمونه ها راحت 40 تا 50 کیلو بایت نمایش داده میشه

ضمناً ویندوز من ویندوز 7

----------


## daniyal_1363

یکی ، دو هفته گذشت و ما هنوز منتظریم ...
منتظر جواب  :متفکر:

----------


## sina32

ما هم منتظریم این سوال به جواب درست و حسابی برسه..........  :متفکر:

----------


## saber67

> کس نخوارد پشت من جز ناخن انگشت من 
> 
> 
> 
> Private Declare Function RasEnumConnections Lib "rasapi32" Alias "RasEnumConnectionsA" (ByVal lprasconn As Long, ByVal lpcb As Long, ByVal lpcConnections As Long) As Long
> Private Declare Function RasGetConnectionStatistics Lib "rasapi32" (ByVal hRasConn As Long, ByVal lpStatistics As Long) As Long
> Private Type RASCONN
>     dwSize As Long
>     hRasConn As Long
> ...



این کدها رو من برای دیال آپ بررسی کردم کاملا درست کار می کنه، یعنی دقیقا اطلاعاتی که ویندوز توی پنجره اطلاعات کانکشن نشون میده رو بر می گردونه
مثلا stat.dwBytesRcved میزان بایت دریافتی رو بر می گردونه

حالا یه خواهشی دارم از دوستانی که اینترنت پر سرعت (ADSL و وایرلس و ...) دارن، این کدها رو تست بکنن ببینن واسه اوناهم اطلاعات درستی میده یا نه!
بعد همین جا نتیجش رو اعلام کنین

----------

