Προς το περιεχόμενο

Socket Events and Multithreading


ntaryl

Προτεινόμενες αναρτήσεις

Δημοσ.

καλημερα παιδια

 

Θελω να ρωτησω αν καποιος μπορει να μου εξηγησει πως υλοποιειται ενα Multithread socket example

αλλα να μην χρησιμοποιηθουν Loops για το accept,recv,send ..

Συγκεκριμενα θελω να χρησιμοποιησω τα events που εχει καθε socket Class

ConnectionRequest

DataArrival

etc

Ευχαριστω πολυ και καλο βραδυ

 

 

Υ.γ Ως ωρας εχω ασχοληθει μονο με socketapi και Loops

Δημοσ.

καλημερα παιδια

 

Θελω να ρωτησω αν καποιος μπορει να μου εξηγησει πως υλοποιειται ενα 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 Για την παρεμβαση :)

Δημοσ.

Κειτα πως εχουν τα πραγματα για ενα καθαρο 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

 

 

 

Δημοσ.

Καλησπερα

Ευχαριστω πολυ για τισ αμεσες απαντησεις

vicky5 :Σου εστειλα ενα μηνυμα σχετικα με το email μου .Τον τροπο με το Looping τον εχω μελετησει αρκετα και εχω υλοποιησει ενα παραδειγματακι με threads σε VB6(καλα ακουσες).Βεβαια υπαρχει ενα μικρο προβληματακι αλλα που θα μου παει ειναι θεμα χρονου να το λυσω...χιχιχιχιχιχι

 

παπι:Φιλε μου εχω χρησιμοποιησει Async sockets παλιοτερα.Εχω μελετησει την wndProc και τον τροπο που δουλευει.

Εμενα με ενδιαφερει πως μπορω να υλοποιησω ενα multithread με την χρηση τησ γνωστης CSocketClass

Με τα Loops δεν ειχα προβλημα να το υλοποιησω αλλα με το CsocketClass και τα events εχω κολλησει

 

Συνεχιζω το διαβασμα μπας και βγαλω ακρη

 

Υ.γ : Πως χρησιμοποιουμε threads και async Sockets ?

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...