الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الرجاء المساعدة من خبراء winsock

مغلق
بدأه الشبكاتي في 20 مايو 2005 · 17 رد · 1,228 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

كيف اجعل اداة الوينسوك تعود لانتظار الاتصال من جديد بعد استلامها البيانات

ولكم جزيل الشكر

#2

السلام عليكم ورحمة الله وبركاته

اظن ان الامر Winsock.Listen يؤدى هذا الغرض والله اعلم :unsure:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#3

شكرا عزيزي لكن حسب معلوماتي لم تستقيل وينسوك البيانات تقفل الاتصال . لكن لما استخدم الامر listen مرة تانية يطلعلي خطأ

#4

حلى حد علمى ان الوينسوك لاتقطع الاتصال تلقائياً وانما يجب اعطاءها الامر Winsock.Close حتى تنهى الاتصال اما عند استقبال البيانات فانها لاتقطع الاتصال فانا تعاملت كثيرا مع ارسال البيانات بالوينسوك ولم تحدث هذه المشكلة معى ابداً فارجو مراجعة الكود او وضع الملف حتى نتمكن من ايجاد الخطأ.

تم تعديل هذه المشاركة بواسطة GHOST2010 في 20 مايو 2005 في 13:51

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#5

Private Sub wsk2_ConnectionRequest(ByVal requestID As Long)

wsk2.Close

wsk2.Accept requestID

End Sub

Private Sub wsk2_DataArrival(ByVal bytesTotal As Long)

Dim m As String

wsk2.GetData m

If m = "1" Then

Timer1.Enabled = False

else

Timer1.Enabled = True

End If

الفكرة في البرنامج هو ان البرنامج يستقبل رسالة من البرنامج الاخر فاذا كانت 0 يشغل العداد واذا 1 يوقفه

ولكن المشكلة تحدث في المرة الثانية وهو عندما تقوم بتشغيل العداد ثم ايقافه ثم تريد تشغيله من جديد فانه لا يعمل واذا اضفت امر انتظار جديد

يحدث خطأ

ولكم جزيل الشكر

#6

والله أنا مش فاهم قصدك هل تريد إغلاق الإستقبال عند وقت معين لاتغلق الإتصال خليه يستقبل ومايعمل شئ أو أنك تريد شئ أخر

وإن لم يكن المطلوب ماهو بالأسفل أي استفسار أنا حاضر

Winsock.zip

تم تعديل هذه المشاركة بواسطة بلال حمدي في 20 مايو 2005 في 17:52

#7

السلام عليكم

مو نحن نقوم بقفل الاتصال في الكود التالي

Winsock1.Close

DoEvents

Winsock1.Accept requestID

وحتى انك اذا جربت ترسل للبرنامج مرة اخرى فستجده لا يستقبل البيانات

#8

جرب الكود التالي

بحيث تصنع مصفوفة من نفس الأداة

private form_load()
winsock(0).localport=1001
winsock(0).listen
end sub

وفي حدث ال connectionrequest

if winsock(1).state=0 then
winsock(1).accept requestid
end if

وفي حدث ال Dataarrival

dim s as string 
winsock(1).getdata s
msgbox s

في الحقيقة كتبت الكود من دون ان اجربه اتمنى ان يكون ماشي معاك

*************************************************

**************************************************

مصطفى زيداني

#9

أخي العزيز أداة الوينسوك بمجرد عمل استماع لها 'Winsock.Listen' تبدأ بفتح البورت المحدد مسبقا و في حدث ال DataArrival يمكنك تلقي المعلومات الآتية من الجهاز الآخر

وسواء تم استقبال معلومات أو لا فالوينسوك تبقي في حالة انصات مالم تعمل لها Close

#10

مشكوريين يا شباب

#11
اقتباس
وحتى انك اذا جربت ترسل للبرنامج مرة اخرى فستجده لا يستقبل البيانات

هل تقصد إذا أغلقت الإتصال لا يقوم بالإتصال مرة أخرى ؟؟؟إذا أضف الكود في ملف server

Private Sub Winsock1_Close()
Winsock1.Close
Winsock1.Listen
End Sub

سلاااااااام

#12

ماحد رد على سؤالي ياشباب

الاهو معرفة رقم الاي بي للجهاز

عن طريق الشفرة

#13

هذا الكود لأحضار رقم ال ip عن طريق ال API :

فى الفورم اكتب التالى

Private Sub Form_Load()
    MsgBox GetWanIP
End Sub

انشأ module و اكتب التالى

Const MAX_IP = 5   'To make a buffer... i dont think you have more than 5 ip on your pc..
Type IPINFO
     dwAddr As Long   ' IP address
    dwIndex As Long ' interface index
    dwMask As Long ' subnet mask
    dwBCastAddr As Long ' broadcast address
    dwReasmSize  As Long ' assembly size
    unused1 As Integer ' not currently used
    unused2 As Integer '; not currently used
End Type
Type MIB_IPADDRTABLE
    dEntrys As Long   'number of entries in the table
    mIPInfo(MAX_IP) As IPINFO  'array of IP address entries
End Type
Type IP_Array
    mBuffer As MIB_IPADDRTABLE
    BufferLen As Long
End Type
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Declare Function GetIpAddrTable Lib "IPHlpApi" (pIPAdrTable As Byte, pdwSize As Long, ByVal Sort As Long) As Long
'converts a Long to a string
Public Function ConvertAddressToString(longAddr As Long) As String
    Dim myByte(3) As Byte
    Dim Cnt As Long
    CopyMemory myByte(0), longAddr, 4
    For Cnt = 0 To 3
        ConvertAddressToString = ConvertAddressToString + CStr(myByte(Cnt)) + "."
    Next Cnt
    ConvertAddressToString = Left$(ConvertAddressToString, Len(ConvertAddressToString) - 1)
End Function
Public Function GetWanIP() As String
Dim Ret As Long, Tel As Long
Dim bBytes() As Byte
Dim TempList() As String
Dim TempIP As String
Dim Tempi As Long
Dim Listing As MIB_IPADDRTABLE
Dim L3 As String


On Error GoTo END1
    GetIpAddrTable ByVal 0&, Ret, True


    If Ret <= 0 Then Exit Function
    ReDim bBytes(0 To Ret - 1) As Byte
    ReDim TempList(0 To Ret - 1) As String
    
    'retrieve the data
    GetIpAddrTable bBytes(0), Ret, False
      
    'Get the first 4 bytes to get the entry's.. ip installed
    CopyMemory Listing.dEntrys, bBytes(0), 4
    
    For Tel = 0 To Listing.dEntrys - 1
        'Copy whole structure to Listing..
        CopyMemory Listing.mIPInfo(Tel), bBytes(4 + (Tel * Len(Listing.mIPInfo(0)))), Len(Listing.mIPInfo(Tel))
        TempList(Tel) = ConvertAddressToString(Listing.mIPInfo(Tel).dwAddr)
    Next Tel
    'Sort Out The IP For WAN
        TempIP = TempList(0)
        For Tempi = 0 To Listing.dEntrys - 1
            L3 = Left(TempList(Tempi), 3)
            If L3 <> "169" And L3 <> "127" And L3 <> "192" Then
                TempIP = TempList(Tempi)
            End If
        Next Tempi
        GetWanIP = TempIP 'Return The TempIP


Exit Function
END1:
GetWanIP = ""
End Function

1- لا خير في حسن الجسوم وطولها إن لم يزن حسن الجسوم عقول

2- لا تنظر إلى صغر الخطيئة .. ولكن انظر إلى عظم من عصيت

3- قد يجمع المال غير آكله . . ويأكل المال غير من جمعه

4- من وثق بالله أغناه ومن توكل عليه كفاه ومن خافه قلت مخافته ومن عرفه تمت معرفته

5- أن تضيء شمعة صغيرة خير لك من أن تنفق عمرك تلعن الظلام

6- لا يحزنك إنك فشلت مادمت تحاول الوقوف على قدميك من جديد

7- صديقك من يصارحك بأخطائك لا من يجملها ليكسب رضاءك

8 - الابتسامة كلمة طيبة بغير حروف

9- لا داعى للخوف من صوت الرصاص .. فالرصاصة التى تقتلك لن تسمع صوتها

10 -- يستطيع الناس أن يعيشوا بلا هواء بضع دقائق وبلا ماء أسبوعين وبلا

طعام حوالى شهرين وبلا أفكار سنوات لا حصر لها

من مواضيعى :

--------------

دروس تعلم كيف تصحح أخطائك بنفسك

برنامج الحائط النارى العربى ---- جديد

برنامج ساعة بالعقارب ------ جديد

لعبة سناك الشهيرة مع الكود

غير نظرتك لل picturebox وانظر ماذا فعلت بها

حمل ملف فلاش على الفورم بكل سهولة

مكتبة تحتوى على 50000 كتاب مجانى معظمها عن الكمبيوتر و البرمجة

برنامج المترجم العربى لترجمة الافلام

#14
/index.php?showtopic=66367

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#15

شاك ومقدر اخي VB6-Rocket حسن تعاونك معي

#16

لمعرفة اي بي الجهاز باستخدام اداة وينسوك

print winsock1.localip

#17

أخى لمعرفة الأى بى الداخلى للجهاز Private IP or Lan IP فيمكنك أستخدام هذا الأمر Text1.text = Winsock1.localip

أما إذا كنت تريد الأى بى الخارجى الخاص بالأنترنت Wan IP or Public IP فيمكنك تطبيق كود الأخ VB-Rocket جزاه الله خيراً

هذا الموضوع مغلق.

مواضيع مشابهة