papalive Δημοσ. 2 Απριλίου 2010 Δημοσ. 2 Απριλίου 2010 Καλησπερα και καλή Ανάσταση. Παιδιά θα ήθελα οποιος ξέρει να μου πει συμβαινει με τα sockets και με τα threads στην C++. Δηλαδή πως μπορω να τα χρησιμοποιησω σε μια chat εφαρμογη. Η σκέψη μου είναι η εξής: Απο την μία πλευρά ( ας το πώ! ) θα είναι ο sever ο οποίος θα έχει δημιουργήσει ενα socket. Απο την άλλη θα είναι ο client ο οποίος και αυτός θα δημιουργεί ενα socket και μεταξύ τους ουσιαστικά θα ανταλλάσει ο ένας το socket του αλλου με αποτέλεσμα να επικοινωνούν. Τα threads ομως και εδω εχω αγνοια θα τα χρησιμοποιώ σε συνδιασμό με το socket του server ? Δηλαδή πρέπει να υπάρχει ενα socket για να δημιουργήσω threads ωστε να εξυπηρετούν κάθε "κλήση" του client ή αρκεί να εχω μόνο threads ? Επίσης αντί να χρησιμοποιώ threads δεν θα μπορούσα να φτιάξω ενα νέο socket για κάθε νέο client ? Γενικότερα ζητάω τα φώτα σας για να μπρέσω να δώ και εγω γιατι χανομαι στα σκοτάδια και στο διαδικτυο. Γενικότερα αν εχετε και κανένα tutorial ( προτιμώ στα Ελληνικά ) να μου προτείνετε.. η τουλάχιστον να μου πείτε ποιές εντολές χρησιμοποιούμε για τα παραπάνω.Τέλος να ενημερώσω πως εχω ηδη φτιάξει εφαρμογή server - client αλλά ο server μπορεί να εξυπηρετήσει μόνο ενα client με την χρήση socket οπότε και θα ήθελα να επεκταθώ περισσότερο. Ευχαριστώ.
bookysmell2004 Δημοσ. 3 Απριλίου 2010 Δημοσ. 3 Απριλίου 2010 Διάβασε λίγο ένα πρόσφατο thread http://www.insomnia.gr/forum/showthread.php?p=3213205. Ίσως έχει πληροφορίες που σε βοηθήσουν. Είμαι βέβαιος ότι στο Insomnia θα υπάρχουν πολλά σχετικά θέματα (δεν έκανα αναζήτηση, είμαι σε mobile συσκευή και ζορίζομαι με το multitasking ;p).
isim Δημοσ. 3 Απριλίου 2010 Δημοσ. 3 Απριλίου 2010 Ειχα κανει κατι παρομοιο σε C me WinAPI...Η λογικη ηταν μολις παρει ενα κανουργιο request ο server να δημιουργησει ενα καινουργιο thread. Δυστηχως ο κωδικας υπαρχει σε ενα pc που ειναι σε κομματια!!!
papalive Δημοσ. 3 Απριλίου 2010 Μέλος Δημοσ. 3 Απριλίου 2010 Ειχα κανει κατι παρομοιο σε C me WinAPI...Η λογικη ηταν μολις παρει ενα κανουργιο request ο server να δημιουργησει ενα καινουργιο thread. Δυστηχως ο κωδικας υπαρχει σε ενα pc που ειναι σε κομματια!!! Πρέπει οποσδήποτε να δημιουργεί νέο thread ?? αν δημιουργήσει νέο socket τι θα γίνει ?? θα εχω πρόβλημα? και κανένα οδηγό για threads ρε παιδιά εχω φάει ολο το internet και ολα ειναι σκορποχωρι ασε..
PCharon Δημοσ. 3 Απριλίου 2010 Δημοσ. 3 Απριλίου 2010 και κανένα οδηγό για threads ρε παιδιά εχω φάει ολο το internet και ολα ειναι σκορποχωρι ασε.. Σε WinAPI κάπως έτσι: > DWORD WINAPI ToThreadSou(LPVOID something) { .......... return 0; } .......... DWORD dwThreadId; HANDLE hThread; hThread = CreateThread(NULL, 0, ToThreadSou, something, 0, &dwThreadId); if(hThread == NULL) MessageBox(hwnd, "CreateThread failed.", "Aborted", MB_OK|MB_ICONERROR); CloseHandle(hThread); ..........
papalive Δημοσ. 4 Απριλίου 2010 Μέλος Δημοσ. 4 Απριλίου 2010 Οκ θα το ψάξω το θεμα και θα δω τι θα βγει.. Thanks
isim Δημοσ. 5 Απριλίου 2010 Δημοσ. 5 Απριλίου 2010 Το thread θα αναλαβει να εξυπηρετησει τo request του client και οχι το socket. Το socket ειναι απλα ο μηχανισμος επικοινωνιας μεταξυ server-client
papalive Δημοσ. 5 Απριλίου 2010 Μέλος Δημοσ. 5 Απριλίου 2010 Το thread θα αναλαβει να εξυπηρετησει τo request του client και οχι το socket. Το socket ειναι απλα ο μηχανισμος επικοινωνιας μεταξυ server-client Καλή η παρατήρηση !!! Κώδικα ετοιμο που μπορώ να βρώ αν γνωρίζεις ή tutorial?
Evgenios1 Δημοσ. 5 Απριλίου 2010 Δημοσ. 5 Απριλίου 2010 google -> "asynchronous socket programming c++" Εχει πραμα.
papalive Δημοσ. 5 Απριλίου 2010 Μέλος Δημοσ. 5 Απριλίου 2010 Ωραία!!! σημερα αυτη ειναι η δουλεια μου, αν καποιος εχει ετοιμο κώδικα και θέλει καλο θα ηταν να τον ανεβασει γιατί σίγουρα θα βοηθήσει ωστε να μην χάσω χρόνο. thanks!
papalive Δημοσ. 7 Απριλίου 2010 Μέλος Δημοσ. 7 Απριλίου 2010 Απο οσα ειδα εδω ->http://msdn.microsoft.com/en-us/library/ms738639%28VS.85%29.aspx απο την στιγμή που θα στείλει ο server ενα μηνυμα στον client ουσιαστικά "κολλάει" εως οτου δεχθεί ενα μήνυμα απο τον client.Πως μπορω να το αποφυγω αυτό το κόλλημα ???
Mika Δημοσ. 7 Απριλίου 2010 Δημοσ. 7 Απριλίου 2010 θα ξεκινησεις ενα νεο thread το οποιο θα ανοιγει το server socket και θα επικοινωνει με τον client
bookysmell2004 Δημοσ. 7 Απριλίου 2010 Δημοσ. 7 Απριλίου 2010 Αυτό συμβαίνει λόγω blocking πολιτικής. Αν διαβάσεις το πρώτο μου post θα πάρεις μια ιδέα και για προηγούμενες απορίες που είχες. Δεν είναι ανάγκη να φτιάξεις νέο thread αν δε σου είναι απαραίτητο ή αν σου φαίνεται πολύπλοκο.
papalive Δημοσ. 7 Απριλίου 2010 Μέλος Δημοσ. 7 Απριλίου 2010 Σωστα.Δηλαδη απο την στιγμη που θα γίνει η επ/νια με τo Socket θα πρέπει να εκτελεστει η create_thread ωστε να περιμένει νέα συνδεση απο άλλο client.
Evgenios1 Δημοσ. 7 Απριλίου 2010 Δημοσ. 7 Απριλίου 2010 Θα στο ζωγραφισω, γιατι με τα λογια ειναι δυσκολο να το εξηγησεις. υγ: Και στο client side μπορεις να βαλεις thread για να μη κολλαει το gi σου. υγ2: windows και "socket thread" δεν κολλαει. Καλυτερα να ψαχτεις για OS level async socks.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.