ntaryl Δημοσ. 17 Ιουλίου 2011 Δημοσ. 17 Ιουλίου 2011 καλημερα παιδια Θελω να ρωτησω αν καποιος μπορει να μου εξηγησει πως υλοποιειται ενα Multithread socket example αλλα να μην χρησιμοποιηθουν Loops για το accept,recv,send .. Συγκεκριμενα θελω να χρησιμοποιησω τα events που εχει καθε socket Class ConnectionRequest DataArrival etc Ευχαριστω πολυ και καλο βραδυ Υ.γ Ως ωρας εχω ασχοληθει μονο με socketapi και Loops
vicky5 Δημοσ. 17 Ιουλίου 2011 Δημοσ. 17 Ιουλίου 2011 καλημερα παιδια Θελω να ρωτησω αν καποιος μπορει να μου εξηγησει πως υλοποιειται ενα Multithread socket example αλλα να μην χρησιμοποιηθουν Loops για το accept,recv,send .. Συγκεκριμενα θελω να χρησιμοποιησω τα events που εχει καθε socket Class ConnectionRequest DataArrival etc Ευχαριστω πολυ και καλο βραδυ Υ.γ Ως ωρας εχω ασχοληθει μονο με socketapi και Loops χωρις Loop το accept??? δεν νομιζω οτι γινεται αυτο που λες..καλα οκ τα αλλα...για να σου δωσω να καταλαβεις ο server θα ανοιξει ενα serversocket και θα περιμενει να δεχτει αιτησεις για συνδεση απο τον client.Μολις δεκτει μια κληση ενεργοποιειται το accept.Αν δεν μπει σε Loop θα φυγει και δεν θα περιμενει αλλον επλατη αρα multithread Τελος.Αν γινεται ειλικρινα θελω να μαθω το τροπο γιατι με κολλησες.Για τα υπολοιπα υπαρχει τροπος.Μπορω να σου στειλω τον πρωτο κωδικα που ειχα γραψει εγω που ηταν απλος.Αν τον θες δωσε μου το email soy Με Inbox yg δεν ξερω αν εννοεις κατι αλλο και δεν εχω καταλαβει εγω σωστα.Αν εννοεις κατι αλλο sorry Για την παρεμβαση
παπι Δημοσ. 17 Ιουλίου 2011 Δημοσ. 17 Ιουλίου 2011 Κειτα πως εχουν τα πραγματα για ενα καθαρο win application (σε c/c++ που δεν εχει wrappers). Τα async winsock2 βασιζονται σε win application. Ενα winapp δεν ειναι τιποτα αλλο απο μια function aka wndproc (ενα callback τιποτα το ιδιαιτερο) που πυροδοτειται οταν το λειτουργικο θελει να μας πει κατι ( απο το ποιο πληκτρο πατηθηκε μεχρι το αν εχει μπει καποιο usb, τα παντα ). Οταν σεταρεις την σερβερ σοκετ εχεις τη δυνατοτητα να ορισεις τι θα γινεται συγχρονισμενα και τι οχι (με τη select, wsaselect etc). Εστω οτι εχει βαλει τα παντα σε async τοτε η διαδικασια γινεται καπως ετσι server app: Τρεχει κανονικα, δεν εχει loops,threads γενικα δεν ασχολειται με καποια socket client app: Connect server app: Εκει που τρεχει κανονικα, του ερχετε ενα event (h wndproc πυροδοτειται με ενα μηνημα που εχει να κανει με τα networks) αυτο το event εχει καποιες πληροφοριες που περιγραφουν το τι event ειναι (πχ accept,read,write,etc) στη περιπτοση που ειναι accpet εσυ πρεπει να καλεσεις την accept η οποια θα σου δωσει την socket του client ( φυσικα δεν περιμενεις) client app: Send server app: Ερχεται ενα network event που σου λεει οτι η socket ειναι ετοιμη για διαβασμα, καλεις την read και παιρνεις τα δεδομενα σου client app: dc server app: Ερχεται ενα network event τυπου disconnect Αυτη ειναι η λογικη, η vb6 θα σου το εχει σε wrapper αυτο το μηχανισμο... αλλα και παλι θα ειναι σαν αυτο, μπορει να μην εχει wndproc αλλα θα εχει events κλπ κλπ σε μουφοκωδικα θα ηταν καπως ετσι > function wndproc (msg,eventdesc) { case msg = event network { case eventdesc == accept accept(...) case eventdesc== read read(...) case eventdesc== dc ... } } Δεν εχεις loops, δεν εχεις thread, δεν ταλαιπωρεις το cpu
ntaryl Δημοσ. 17 Ιουλίου 2011 Μέλος Δημοσ. 17 Ιουλίου 2011 Καλησπερα Ευχαριστω πολυ για τισ αμεσες απαντησεις vicky5 :Σου εστειλα ενα μηνυμα σχετικα με το email μου .Τον τροπο με το Looping τον εχω μελετησει αρκετα και εχω υλοποιησει ενα παραδειγματακι με threads σε VB6(καλα ακουσες).Βεβαια υπαρχει ενα μικρο προβληματακι αλλα που θα μου παει ειναι θεμα χρονου να το λυσω...χιχιχιχιχιχι παπι:Φιλε μου εχω χρησιμοποιησει Async sockets παλιοτερα.Εχω μελετησει την wndProc και τον τροπο που δουλευει. Εμενα με ενδιαφερει πως μπορω να υλοποιησω ενα multithread με την χρηση τησ γνωστης CSocketClass Με τα Loops δεν ειχα προβλημα να το υλοποιησω αλλα με το CsocketClass και τα events εχω κολλησει Συνεχιζω το διαβασμα μπας και βγαλω ακρη Υ.γ : Πως χρησιμοποιουμε threads και async Sockets ?
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.