• Downloads
  • ! Read Me !
  • Μαθήματα
  • Φοιτητικά
  • Τεχνικά Θέματα
  • Συζητήσεις
  • Happy Hour!
  • About THMMY.gr
 V  < 
Search:  
Welcome, Guest. Please login or register.
June 16, 2025, 21:33:50 pm

Login with username, password and session length
Links
  Thmmy.gr portal
   Forum
   Downloads
   Ενεργ. Λογαριασμού
   Επικοινωνία
  
  Χρήσιμα links
   Σελίδα τμήματος
   Βιβλιοθήκη Τμήματος
   Elearning
   Φοιτητικά fora
   Πρόγραμμα Λέσχης
   Πρακτική Άσκηση
   Ηλεκτρονική Εξυπηρέτηση Φοιτητών
   Διανομή Συγγραμμάτων
   Ψηφιακό Καταθετήριο Διπλωματικών
   Πληροφορίες Καθηγητών
   Instagram @thmmy.gr
   mTHMMY
  
  Φοιτητικές Ομάδες
   ACM
   Aristurtle
   ART
   ASAT
   BEAM
   BEST Thessaloniki
   EESTEC LC Thessaloniki
   EΜΒ Auth
   IAESTE Thessaloniki
   IEEE φοιτητικό παράρτημα ΑΠΘ
   SpaceDot
   VROOM
   Panther
  
Πίνακας Ελέγχου
Welcome, Guest. Please login or register.
June 16, 2025, 21:33:50 pm

Login with username, password and session length

Αναζήτηση

Google

THMMY.gr Web
Πρόσφατα
[Σ.Π.Η.Ε.] Γενικές απορίε...
by Nikos_313
[Today at 19:49:00]

[ΘΤΠΑ] Γενικές απορίες κα...
by Nikos_313
[Today at 16:56:56]

[Εφ.Θερμοδυναμική] Γενικέ...
by Λαμπτήρας
[Today at 15:55:08]

[Αρχές Οικονομίας] Να επι...
by _Trob
[Today at 13:28:21]

[Σ.Α.Π.Γ.] Εργασία 2025
by Nikos_313
[Today at 12:13:45]

Αποτελέσματα Εξεταστικής ...
by Nikos_313
[Today at 12:01:53]

Πρακτική Άσκηση ΤΗΜΜΥ 201...
by George_RT
[Today at 10:22:18]

[Διανεμημένη Παραγωγή] Γε...
by Διάλεξις
[Today at 01:56:37]

Ισραήλ - Ιράν: Πόλεμος στ...
by Katarameno
[June 15, 2025, 20:08:49 pm]

Αντικατάστασης πυκνωτή σε...
by nmpampal
[June 15, 2025, 16:25:56 pm]

[Σ.Π.Η.Ε.] Παλιά θέματα -...
by nmpampal
[June 15, 2025, 06:43:15 am]

Το thmmy.gr στο instagram...
by Mr Watson
[June 15, 2025, 00:50:23 am]

[Λογισμός ΙΙ] Απορίες σε...
by el mariachi
[June 14, 2025, 20:47:07 pm]

ΠΡΟΣΟΧΗ στο ανέβασμα θεμά...
by tzortzis
[June 14, 2025, 16:54:08 pm]

Ρυθμίσεις Θεμάτων της Ανώ...
by el mariachi
[June 14, 2025, 11:56:45 am]

Πότε θα βγει το μάθημα; -...
by Nikos_313
[June 14, 2025, 10:00:55 am]

Αρχείο Ανακοινώσεων [Arch...
by Nikos_313
[June 14, 2025, 09:58:14 am]

Αλέξης Τσίπρας, η επιστρο...
by Yamal
[June 14, 2025, 04:42:23 am]

Έναρξη Δηλώσεων Συμμετοχή...
by IEEE SB
[June 14, 2025, 00:10:19 am]

[Δυναμική Συμπεριφορά ΣΗΕ...
by soko_freta
[June 13, 2025, 01:05:36 am]
Στατιστικά
Members
Total Members: 9960
Latest: valco08
Stats
Total Posts: 1426676
Total Topics: 31711
Online Today: 226
Online Ever: 2093
(April 17, 2025, 08:47:49 am)
Users Online
Users: 72
Guests: 106
Total: 178
Roidos
cealexop
Notac
christinabisdeki
eleftheria
Spyros.kleanthous
KZerenidis
superkolios
Nikos_313
mixkats
grethem
bougatsa
xarisagraf
nmpampal
whatdoesthefoxsay
Fotis
BossiTsif
itsikou
qwertyuiop
mike1996
AA RE LEWN
mmikelo
DK06
christina02
thomassamaras
valco08
gpap
Deviate
vaggelis.ntokas
johnnypap
amprozos
manos_diakakis
georkala
BENEDICTVS
IBOURAS
krith
gorilaki
DimKaratzas
diamantis
Argiris
moutdimi
mrotskos
NickSpan
Retroman07
mimaki
sassi
xarabalios
giannisd
aalmpanb
mdimitrig
tasakis
andreaspaper
airam
vagk
sigklitiki
jim_sklab
skopsinos
ddantono
thenoface
dimchin
sterlouk
dimitrisblioumis
Nefeli Nikita
pdiamantis
andyy
iropap
chrysaep
Εμφάνιση

Νέα για πρωτοετείς
Είσαι πρωτοετής;... Καλώς ήρθες! Μπορείς να βρεις πληροφορίες εδώ. Βοήθεια για τους καινούργιους μέσω χάρτη.
Κατεβάστε εδώ το Android Application για εύκολη πρόσβαση στο forum.
Ανεβάζετε τα θέματα των εξετάσεων στον τομέα Downloads με προσοχή στα ονόματα των αρχείων!

Νέα!
Πληροφορίες Καθηγητών
THMMY.gr > Forum > Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών  > 8ο Εξάμηνο > Ενσωματωμένα Συστήματα Πραγματικού Χρόνου > [Eνσωματωμένα] Εργασίες 2019
0 Members and 1 Guest are viewing this topic.
Pages: 1 ... 5 6 [7] 8 9 10 Go Down Print
Author Topic: [Eνσωματωμένα] Εργασίες 2019  (Read 17415 times)
_init
Καταξιωμένος/Καταξιωμένη
***
Posts: 116



View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #90 on: August 16, 2019, 10:26:17 am »

Quote from: geormich on August 16, 2019, 05:47:08 am
Μην το συζητάς.. Tongue ..Με βοήθησες πάρα πολύ όπως σου είπα....    Roll Eyes

Βασικά κάτι τελευταίες απορίες έχω μωρέ.. LOL Tongue Τελευταίες τελευταίες ελπίζω......Να κοκκαλώσει το χέρι μου από την πληκτρολόγηση να μην μπορώ να γράψω άλλο.. Tongue

 Grin Grin Grin

Quote from: geormich on August 16, 2019, 05:47:08 am
1.Βασικά αυτό για τον consumer-producer στο ρώτησα..γιατί δεν έχω καταλάβει στο πρώτο σκέλος της απάντησής σου που μου είπες για το P2P αν εννοείς

a.ότι θα πρέπει να χωρίσω server και client σε 2 συναρτήσεις και εκεί μέσα στις συναρτήσεις τους να βάλω τα threads(αν και τότε θες 4 threads,1 για το connect 1 για το listen και 2 για τα sockets)και θα τους καλώ από την main σαν συναρτήσεις ή σαν threads..  ή αν εννοείς
b.ότι θα υπάρχουν μέσα στην main αυτά τα 3 threads και απλά θα υλοποιούν αυτές τις λειτουργίες..Και θα προσομοιώνεται έτσι η λειτουργία server και client μαζί..
Τι από τα 2 εννοείς?? Smiley

2.Επίσης πάνω στο ίδιο θέμα με το P2P πώς θα εναλάσσεται η λειτουργία server client?Aπλά μέσω των threads?px 0.1 sec το ένα 0.1 sec το άλλο? Ή θα είναι ανοιχτά και τα δύο πάντα?Όμως αυτό λογικά δεν είναι λάθος?Δεν θα πρέπει για ένα χρονικό διάστημα το κάθε ενσωματωμένο να λειτουργεί είτε μόνο σαν node είτε μόνο σαν server?(πχ με κάποια alarm ή κάτι να ενεργοποιείς την μία ή την άλλη λειτουργία κάθε φορά)

Τα client και server μπορεις να τα βαλεις ως thread στη main.

Μπορείς να συνδεθείς με ένα node με δυο τρόπους:
- να συνδεθεί αυτό σε εσένα στο listen()ing που κάνεις με το server thread σου
- να συνδεθείς εσύ σ'αυτό κάνωντας connect() με το client thread σου
Και στις δυο περιπτώσεις αφού γίνει establish το connection θα προκύψει ένα νέο socket. Ένα TCP Socket στέλνει και λαμβάνει απο διαφορετικά "κανάλια" πράγμα που σημαίνει ότι μπορείς να λαμβάνεις/στέλνεις απο/προς το αλλο node ταυτοχρονα. Οπότε, αφού επιτευχθεί η σύνδεση με όποιον απο τους δυο τρόπους, χάνεται η έννοια του client/server και τα δύο nodes είναι ίσα (peers).

Υπάρχει και η εξής εναλλακτική:
Να έχεις δύο sockets για τη σύδεση με το κάθε node. Το ένα socket απο το server thread σου και το άλλο socket απο το client thread σου. Στο socket του server thread θα στέλνεις μόνο και στο socket του client thread θα λαμβάνεις μόνο.
Φυσικά, όλοι θα πρέπει να το υλοποιήσουμε με τον ίδιο τρόπο αλλιώς θα υπάρξει πρόβλημα στην επικοινωνία.
Γι'αυτό έστειλα email στον Φλώρο αλλά μάντεψε... Cheesy

Εγώ πάντως ακολούθησα την πρώτη περίπτωση, όπου γίνεται establish το connection με όποιον τρόπο και μετά επικοινωνούνε τα nodes και προς τις δυο κατευθύνσεις μέσω του ίδιου socket.

Quote from: geormich on August 16, 2019, 05:47:08 am
3.Επίσης τη λίστα με τα ΑΕΜΣ και τις IPs είπε μήπως πότε θα τα ανεβάσει??Πέφτει και εξεταστική γαμώτο..Αυτά θα τα βάλουμε σε μια λίστα δηλαδή και από εκεί θα τα τραβήξουμε?Δεν θα τα πληκτρολογεί ο χρήστης?

Ναι θα τα βάλεις σε μια λίστα και μετά θα τα βάζεις στο πρόγραμμα και προγραμματιστικά θα τα μετατρέπεις σε IP όπως έγραψα στο προηγούμενο ποστ.
Βάλε εσύ τώρα 10 random ΑΕΜ να δεις ότι δουλεύει και θα στείλουν αυτοί τη λίστα 1 μέρα πριν απο το deadline.

Quote from: geormich on August 16, 2019, 05:47:08 am
4.Τέλος τα μηνύματα πώς θα τα παράγουμε..Με μια random τυχαία ανά 1-5 λεπτά μου είπες..Τα μηνύματα επίσης θα παράγονται κι αυτά τυχαία??Ή θα τα πληκτρολογεί ο χρήστης τυχαία??

Έτσι όπως το έχω καταλάβει θα παράγονται απο το πρόγραμμα. Δεν θα συνδέεσαι δηλαδή εκείνη την ώρα στο RPi για να γράψεις μήνυμα.
Οπότε, μπορείς να κάνεις έναν πίνακα με κάποια μηνύματα και να διαλέγει κάθε φορά ένα απο εκείνα ή μπορείς να στέλνεις το ίδιο μήνυμα κάθε φορά. Δεν διευκρινίζει η εκφώνηση το περιεχόμενο του μηνύματος.
Ναι θα βάζεις έναν timer για μια τυχαία διάρκεια κάθε φορά στο διάστημα που γράφει η εκφώνηση (1-5 ή 5-10 δε θυμάμαι) και όταν τερματίζει ο timer θα παράγεις ένα τυχαίο μήνυμα και θα το προσθέτεις στο buffer σου.

Quote from: geormich on August 16, 2019, 05:47:08 am

5.Όταν λες για το listen() ένα thread εννοείς ένα για το listen() και για το bind() μαζί ή μόνο για το listen()??

ναι. (και το bind() μαζί)
Logged
geormich
Νεούλης/Νεούλα
*
Posts: 26


View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #91 on: August 16, 2019, 11:08:45 am »

Quote from: _init on August 16, 2019, 10:26:17 am
Grin Grin Grin

Τα client και server μπορεις να τα βαλεις ως thread στη main.

Μπορείς να συνδεθείς με ένα node με δυο τρόπους:
- να συνδεθεί αυτό σε εσένα στο listen()ing που κάνεις με το server thread σου
- να συνδεθείς εσύ σ'αυτό κάνωντας connect() με το client thread σου
Και στις δυο περιπτώσεις αφού γίνει establish το connection θα προκύψει ένα νέο socket. Ένα TCP Socket στέλνει και λαμβάνει απο διαφορετικά "κανάλια" πράγμα που σημαίνει ότι μπορείς να λαμβάνεις/στέλνεις απο/προς το αλλο node ταυτοχρονα. Οπότε, αφού επιτευχθεί η σύνδεση με όποιον απο τους δυο τρόπους, χάνεται η έννοια του client/server και τα δύο nodes είναι ίσα (peers).

Υπάρχει και η εξής εναλλακτική:
Να έχεις δύο sockets για τη σύδεση με το κάθε node. Το ένα socket απο το server thread σου και το άλλο socket απο το client thread σου. Στο socket του server thread θα στέλνεις μόνο και στο socket του client thread θα λαμβάνεις μόνο.
Φυσικά, όλοι θα πρέπει να το υλοποιήσουμε με τον ίδιο τρόπο αλλιώς θα υπάρξει πρόβλημα στην επικοινωνία.
Γι'αυτό έστειλα email στον Φλώρο αλλά μάντεψε... Cheesy

Εγώ πάντως ακολούθησα την πρώτη περίπτωση, όπου γίνεται establish το connection με όποιον τρόπο και μετά επικοινωνούνε τα nodes και προς τις δυο κατευθύνσεις μέσω του ίδιου socket.

Ναι θα τα βάλεις σε μια λίστα και μετά θα τα βάζεις στο πρόγραμμα και προγραμματιστικά θα τα μετατρέπεις σε IP όπως έγραψα στο προηγούμενο ποστ.
Βάλε εσύ τώρα 10 random ΑΕΜ να δεις ότι δουλεύει και θα στείλουν αυτοί τη λίστα 1 μέρα πριν απο το deadline.

Έτσι όπως το έχω καταλάβει θα παράγονται απο το πρόγραμμα. Δεν θα συνδέεσαι δηλαδή εκείνη την ώρα στο RPi για να γράψεις μήνυμα.
Οπότε, μπορείς να κάνεις έναν πίνακα με κάποια μηνύματα και να διαλέγει κάθε φορά ένα απο εκείνα ή μπορείς να στέλνεις το ίδιο μήνυμα κάθε φορά. Δεν διευκρινίζει η εκφώνηση το περιεχόμενο του μηνύματος.
Ναι θα βάζεις έναν timer για μια τυχαία διάρκεια κάθε φορά στο διάστημα που γράφει η εκφώνηση (1-5 ή 5-10 δε θυμάμαι) και όταν τερματίζει ο timer θα παράγεις ένα τυχαίο μήνυμα και θα το προσθέτεις στο buffer σου.

ναι. (και το bind() μαζί)



Οκ.. Smiley Κατάλαβα..Όλα όσα λες είναι ξεκάθαρα..Το μόνο που δεν έχω καταλάβει από αυτά που είπες και είναι και η τελευταία μου ερώτηση..

Τελικά θα έχω
a periptwsh.2 threads ένα server κι ένα client στη main που θα τρέχουν τις ρουτίνες client και server?

Ή θα έχω b periptwsh.4 threads τελικώς?Ένα για το connect , ένα για το listening, ένα για το ένα socket του server και ένα για το άλλο socket του client??

Αυτό δεν έχω καταλάβει..

Εν τέλει έπειτα μου είπες αν κατάλαβα καλά ότι μπορούμε στην b περίπτωση είτε να έχουμε ένα thread για socket εννιαίο είτε 2 threads για server και client??

Αυτά δεν έχω καταλάβει από τις απαντήσεις σου..

ΓΙα τα άλλα σαφώς πάρα πολλά ευχαριστώ!!!!!  Grin Smiley Αλλά και για αυτά Tongue
Logged
_init
Καταξιωμένος/Καταξιωμένη
***
Posts: 116



View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #92 on: August 16, 2019, 12:56:40 pm »

Quote from: geormich on August 16, 2019, 11:08:45 am

Οκ.. Smiley Κατάλαβα..Όλα όσα λες είναι ξεκάθαρα..Το μόνο που δεν έχω καταλάβει από αυτά που είπες και είναι και η τελευταία μου ερώτηση..

Τελικά θα έχω
a periptwsh.2 threads ένα server κι ένα client στη main που θα τρέχουν τις ρουτίνες client και server?

Ή θα έχω b periptwsh.4 threads τελικώς?Ένα για το connect , ένα για το listening, ένα για το ένα socket του server και ένα για το άλλο socket του client??

Αυτό δεν έχω καταλάβει..

Εν τέλει έπειτα μου είπες αν κατάλαβα καλά ότι μπορούμε στην b περίπτωση είτε να έχουμε ένα thread για socket εννιαίο είτε 2 threads για server και client??

Αυτά δεν έχω καταλάβει από τις απαντήσεις σου..

ΓΙα τα άλλα σαφώς πάρα πολλά ευχαριστώ!!!!!  Grin Smiley Αλλά και για αυτά Tongue

Γενικά, έχει πολλούς τρόπους να το κάνεις. Δεν υπάρχει σωστό. Είναι τι θέλεις να ακολουθήσεις.
Ενδεικτικά, σου έγραψα μια αρχιτεκτονική που θα μπορούσες να εφαρμόσεις, σύμφωνα με την οποία θα έχεις:

- ένα thread που θα κάνεις το bind() και listen() που είναι ουσιαστικά το server thread
- ένα thread που θα προσπαθείς να κάνεις connect() στα διάφορα nodes απο τη λίστα που είναι ουσιαστικά το client thread

Απο εκεί και πέρα ότι συνδεθεί ένα node στο δικό σου είτε μέσω του listening socket (server) είτε μέσω του connect (client) θα δημιουργηθεί ένα νέο socket που είναι αυτό που θα χρησιμοποιήσεις για να ανταλλάξεις μηνύματα με το άλλο node.
Εδώ τώρα μπορείς να ακολουθήσεις δίαφορους τρόπους. Ενδεικτικά:
Α) να δημιουργείς ένα νέο thread για κάθε τέτοιο socket, το οποίο θα διαχειρίζεται την ανταλλαγή μηνυμάτων με το εκάστοτε node.
Β) να έχεις ένα thread που θα στέλνεις όλα αυτα τα sockets και να χρησιμοποιήσεις I/O multiplexing για να διαχειριστείς τις ανταλλαγές μηνύματων.

Αν δεν έγινα κατανοητός πες μου να γράψω κι άλλα... Tongue
Logged
geormich
Νεούλης/Νεούλα
*
Posts: 26


View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #93 on: August 16, 2019, 22:31:18 pm »

Quote from: _init on August 16, 2019, 12:56:40 pm
Γενικά, έχει πολλούς τρόπους να το κάνεις. Δεν υπάρχει σωστό. Είναι τι θέλεις να ακολουθήσεις.
Ενδεικτικά, σου έγραψα μια αρχιτεκτονική που θα μπορούσες να εφαρμόσεις, σύμφωνα με την οποία θα έχεις:

- ένα thread που θα κάνεις το bind() και listen() που είναι ουσιαστικά το server thread
- ένα thread που θα προσπαθείς να κάνεις connect() στα διάφορα nodes απο τη λίστα που είναι ουσιαστικά το client thread

Απο εκεί και πέρα ότι συνδεθεί ένα node στο δικό σου είτε μέσω του listening socket (server) είτε μέσω του connect (client) θα δημιουργηθεί ένα νέο socket που είναι αυτό που θα χρησιμοποιήσεις για να ανταλλάξεις μηνύματα με το άλλο node.
Εδώ τώρα μπορείς να ακολουθήσεις δίαφορους τρόπους. Ενδεικτικά:
Α) να δημιουργείς ένα νέο thread για κάθε τέτοιο socket, το οποίο θα διαχειρίζεται την ανταλλαγή μηνυμάτων με το εκάστοτε node.
Β) να έχεις ένα thread που θα στέλνεις όλα αυτα τα sockets και να χρησιμοποιήσεις I/O multiplexing για να διαχειριστείς τις ανταλλαγές μηνύματων.

Αν δεν έγινα κατανοητός πες μου να γράψω κι άλλα... Tongue

Κοίτα..ενώ καταλαβαίνω τι θες να μου πεις σε γενικές γραμμές δεν καταλαβαίνω τι θες να μου πεις ακριβώς. .κάπου το χάνω  Tongue Δεν δίνουμε κάνα ραντεβού στο Πολυτεχνείο καλύτερα να σε ρωτήσω από κοντά??  Tongue Και ο καφές κερασμενος Grin Cool η ανοίγουμε κάνα μπουκάλι  Grin  Cheesy όλα πληρωμένα χαχαχα  Tongue

Οκ σοβαρά τώρα..Κοιτα αν μπορείς πες μου λίγο πιο συγκεκριμενα 2 τελευταία πράγματα please γιατί κάπου το χασα.. Ευτυχώς που έχουμε κάνα μήνα ακομα μεχρι να παραδοσουμε την εργασία  Tongue


Κοίτα θα σου πω έναν τρόπο υλοποίησης ετσι όπως τα κατάλαβα εγώ..και θα σε κάνω και μια δυο διευκρινιστικες και επιβεβαιωτικες ερωτήσεις πάνω σε αυτά που μου είπες για να δω αν τα κατάλαβα τελικά σωστά.....


1.Ας πούμε ότι φτιάχνουμε μια λουπα που δημιουργεί threads και μέσα υπαρχει το connect και ένα thread που παίρνει σαν όρισμα τη συνάρτηση connection και κάνει connection..η λουπα διαρκεί μέχρι να γίνει connection με ανώτατο όριο όσος είναι και ο αριθμός των nodes αλλιώς επιστρέφει μήνυμα λαθους
2.Αντιστοιχα φτιαχνουμε μια λουπα για το listen όπου καλουμε τη συνάρτηση listening που φτιαξαμε μέσα στην οποία υπάρχει το listen() και το bind() από εντολες
3.Φτιαχνουμε όχι σε λουπα όμως αυτα δύο ξεχωριστά threads ένα για το server socket κι ένα για το client socket αντιστοιχα που παίρνουν σαν όρισμα
2 αντιστοιχες συναρτησεις που φτισξαμε για αυτό το σκοπό στις οποίες βαζουμε μέσα τις εντολές των sockets..
Κατά τα άλλα προφανώς βάζουμε και mutex cond κλπ για το κλείδωμα κλπ κοινών περιοχών μνήμης..

Είναι σωστή αυτή η υλοποιηση??Αν υποθέσουμε οτι βάζουμε μέσα ακριβώς ότι σου είπα από εντολες..

Και τέλος οι εξής διευκρινιστικες ερωτήσεις:

α.Με βάση τα λεγόμενά σου πρέπει να βάλουμε σε λουπες τα sockets.....τα threads για το connect και το listen δεν τα βάζουμε σε λούπες..Σωστά????αυτό δεν εννοούσες???

Είναι όμως κι αυτό που λέω εγώ σωστό η όχι????

β.Ακόμη η αλλαγή από την μία κατάσταση server στην client γίνεται αυτόματα σωστά??δηλαδή δεν χρειάζεται ούτε alarm ούτε τίποτα..Σωστά??

γ.Επίσης
Αρα εν τελει δεν είναι απαραίτητο να φτιάξουμε στη main ένα συνολικό server thread και ένα συνολικό client thread??Μπορουμε να το κάνουμε και χωρίς αυτα και μόνο με τα 3 η 4 threads που συζητησαμε??
Οι εντολές του client και του server μέσα στη main δεν θα ναι Μ αυτόν τον τρόπο ούτως η άλλως και σ αυτή την περιπτωση?

δ.Τέλος αυτό με το I/O multiplexing έχεις κάνα link να μου στείλεις?με select()εννοείς??

Τελείωσα για σήμερα ..  Lips Sealed
« Last Edit: August 16, 2019, 23:07:39 pm by geormich » Logged
_init
Καταξιωμένος/Καταξιωμένη
***
Posts: 116



View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #94 on: August 17, 2019, 02:49:30 am »

Quote from: geormich on August 16, 2019, 22:31:18 pm
Κοίτα..ενώ καταλαβαίνω τι θες να μου πεις σε γενικές γραμμές δεν καταλαβαίνω τι θες να μου πεις ακριβώς. .κάπου το χάνω  Tongue Δεν δίνουμε κάνα ραντεβού στο Πολυτεχνείο καλύτερα να σε ρωτήσω από κοντά??  Tongue Και ο καφές κερασμενος Grin Cool η ανοίγουμε κάνα μπουκάλι  Grin  Cheesy όλα πληρωμένα χαχαχα  Tongue

χαχαχαχα ξεπουλάει το μαγαζί... Cheesy

Quote from: geormich on August 16, 2019, 22:31:18 pm
1.Ας πούμε ότι φτιάχνουμε μια λουπα που δημιουργεί threads και μέσα υπαρχει το connect και ένα thread που παίρνει σαν όρισμα τη συνάρτηση connection και κάνει connection..η λουπα διαρκεί μέχρι να γίνει connection με ανώτατο όριο όσος είναι και ο αριθμός των nodes αλλιώς επιστρέφει μήνυμα λαθους
2.Αντιστοιχα φτιαχνουμε μια λουπα για το listen όπου καλουμε τη συνάρτηση listening που φτιαξαμε μέσα στην οποία υπάρχει το listen() και το bind() από εντολες
3.Φτιαχνουμε όχι σε λουπα όμως αυτα δύο ξεχωριστά threads ένα για το server socket κι ένα για το client socket αντιστοιχα που παίρνουν σαν όρισμα
2 αντιστοιχες συναρτησεις που φτισξαμε για αυτό το σκοπό στις οποίες βαζουμε μέσα τις εντολές των sockets..
Κατά τα άλλα προφανώς βάζουμε και mutex cond κλπ για το κλείδωμα κλπ κοινών περιοχών μνήμης..

Είναι σωστή αυτή η υλοποιηση??Αν υποθέσουμε οτι βάζουμε μέσα ακριβώς ότι σου είπα από εντολες..

Εδώ σ'εχασα λίγο...
Οποίον τρόπο και να διαλέξεις (εκτός αν δεν χρησιμοποίησεις καθόλου παράλληλο προγραμματισμό) θα χρειαστείς τουλάχιστον δυο threads: το server thread και το client thread.
- Το server thread θα κάνει bind() και θα ανοίξει ένα socket που θα κάνει listen(). Κάθε φορά που θα συνδέεται ένα νέο node μέσω του socket που κάνει listen(), θα δημιουργείται ένα νέο socket, θα το πω για ευκολία node socket.
- Το client thread θα λουπάρει τη λίστα με τις IP των nodes και θα προσπαθεί να κάνει connect() σε κάθε node που δεν είναι συνδεδεμένο με το δικό σου node (βλ. status στο προηγούμενο ποστ). Κάθε φορά που θα γίνεται επιτυχές connect() θα δημιουργείται ένα καινούργιο socket, επίσης node socket.

Απο εκεί και πέρα αυτό που έγραφα στο προηγούμενο ποστ είναι ότι ενδεικτικά μπορείς να κάνεις τις εξής υλοποιήσεις:
Α) να φτιάχνεις ένα καινούργιο thread για κάθε node socket, να κάνεις την ανταλλαγή μηνυμάτων και να το κλείνεις μετά
Β) να στέλνεις όλα τα node sockets σε ένα thread και να χρησιμοποιήσεις I/O multiplexing για να κάνεις την ανταλλαγή μηνυμάτων σε όλα μαζί απο το ίδιο thread.

Λέγωντας Ι/Ο multiplexing εννοώ select, poll ή epoll ή kqueue. Προτείνω select ή poll μιας και δεν παίζει με τίποτα να έχουμε πάνω απο 10 nodes ταυτόχρονα συνδεδεμένα οπότε δεν έχει νοήμα να μπλέξεις με τα τελευταία που είναι πιο περίπλοκα.

Αν πάλι δεν έγινα κατανοητός, γράψε μέχρι να το βρούμε  Tongue
Logged
geormich
Νεούλης/Νεούλα
*
Posts: 26


View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #95 on: August 18, 2019, 05:14:19 am »

Quote from: _init on August 17, 2019, 02:49:30 am
χαχαχαχα ξεπουλάει το μαγαζί... Cheesy

Εδώ σ'εχασα λίγο...
Οποίον τρόπο και να διαλέξεις (εκτός αν δεν χρησιμοποίησεις καθόλου παράλληλο προγραμματισμό) θα χρειαστείς τουλάχιστον δυο threads: το server thread και το client thread.
- Το server thread θα κάνει bind() και θα ανοίξει ένα socket που θα κάνει listen(). Κάθε φορά που θα συνδέεται ένα νέο node μέσω του socket που κάνει listen(), θα δημιουργείται ένα νέο socket, θα το πω για ευκολία node socket.
- Το client thread θα λουπάρει τη λίστα με τις IP των nodes και θα προσπαθεί να κάνει connect() σε κάθε node που δεν είναι συνδεδεμένο με το δικό σου node (βλ. status στο προηγούμενο ποστ). Κάθε φορά που θα γίνεται επιτυχές connect() θα δημιουργείται ένα καινούργιο socket, επίσης node socket.

Απο εκεί και πέρα αυτό που έγραφα στο προηγούμενο ποστ είναι ότι ενδεικτικά μπορείς να κάνεις τις εξής υλοποιήσεις:
Α) να φτιάχνεις ένα καινούργιο thread για κάθε node socket, να κάνεις την ανταλλαγή μηνυμάτων και να το κλείνεις μετά
Β) να στέλνεις όλα τα node sockets σε ένα thread και να χρησιμοποιήσεις I/O multiplexing για να κάνεις την ανταλλαγή μηνυμάτων σε όλα μαζί απο το ίδιο thread.

Λέγωντας Ι/Ο multiplexing εννοώ select, poll ή epoll ή kqueue. Προτείνω select ή poll μιας και δεν παίζει με τίποτα να έχουμε πάνω απο 10 nodes ταυτόχρονα συνδεδεμένα οπότε δεν έχει νοήμα να μπλέξεις με τα τελευταία που είναι πιο περίπλοκα.

Αν πάλι δεν έγινα κατανοητός, γράψε μέχρι να το βρούμε  Tongue

Χαχα..Οκ..έτσι όπως το θέτεις δεν γίνεται να μην ρωτήσω κι άλλη ερώτηση.... Tongue

Κοίτα..έχω τις εξής απορίες για να το κλείσουμε το θέμα.. Smiley ελπίζω δηλαδή Tongue Grin:
1.Τα server thread και τα client thread είναι απαραίτητα ή μπορώ να κάνω threads μόνο συγκεκριμένα set εντολών των server και των client
πχ listen,connect κλπ και όχι ολόκληρο τον client και τον server? Grin Γιατί σε προηγούμενα posts αυτό μου είχες πει εκτός αν κατάλαβα εγώ λάθος.. Tongue

2.Τα server thread και client thread σαν τελευταίο όρισμα(το τέταρτο από αριστερά προς τα δεξιά)πρέπει να έχουν το buffer μου ή όποια θέση μνήμης θέλω?και πρέπει να είναι κοινή μεταξύ τους ή όχι?

3.Όταν λες το client thread θα λουπάρει τη λίστα με τις IP των nodes τι εννοείς?Ότι θα είναι μέσα σε while(1) όλες οι εντολές?
Και ακόμα και αυτό να εννοείς πώς θα λουπάρει τη λίστα με τις IPs?Εννοείς ότι κάθε φορά που θα μπαίνει στη λούπα θα προσπαθεί να κάνει connect στην εκάστοτε Receivers IP ή Servers IP να το πω καλύτερα που όρισα?Ή με άλλα λόγια την IP που κάθε φορά εγώ θα ορίζω σαν Receivers IP με τυχαίο τρόπο -εννοώ με τον τρόπο που μας είπανε είτε μέσα στη while(1) είτε έξω από την while(1) μέσω όποιου τρόπου το ορίσαμε εμείς όπως πχ μέσω alarm(1) κλπ- αυτό θα προσπαθεί να την κάνει connect και αν γίνει το connect αυτό θα δημιουργήσει ένα νέο socket?Αυτό εννοείς που λέω ή εννοείς κάτι άλλο θα λουπάρει τις IPs?Επίσης το AEM τo δικό μας πρέπει σε λούπα να το πληκτρολογούμε εμείς ή αλλιώς πρέπει να το εισάγουμε?Για το ΑΕΜ του παραλήπτη μας είπανε..μέσω τυχαίου τρόπου θα επιλέγεται....

4.Είναι απαραίτητο να φτιάχνω ένα καινούργιο thread για κάθε node socket που δημιουργείται ή όχι?
Επίσης είναι απαραίτητο να το κλείνω μετά ή όχι?Φαντάζομαι να κάνω exit εννοείς σωστά?Αλλά είναι απαραίτητο αυτό ή όχι?
Και τέλος για κάθε καινούργιο node socket που δημιουργείται εννοείς από την εντολή sockfd = socket(AF_INET, SOCK_STREAM, 0) και κάτω??

5.Πώς ορίζω την SENDERS IP και την RECEIVERS IP ώς client_address και server_adress αντίστοιχα για να μπορέσω να τις χρησιμοποιήσω μετά στα socket?Θα μπορούσα να κάνω πχ αυτό serv_addr.sin_addr.s_addr=SENDER_ADDR;
   cli_addr.sin_addr.s_addr=RCVER_ADDR;??Επίσης στα sockets πώς ορίζω την IP? Όπως είπα ή αλλιώς?
πχ στο socket του client      bcopy((char *)server->h_addr,            ενώ στο socket του server         serv_addr.sin_addr.s_addr =
                                     (char *)&serv_addr.sin_addr.s_addr,                                                          INADDR_ANY;
                                                            server->h_length);                                                    

6.Ως 4α ορίσματα theads ξεχωριστών και μεμονωμένων set εντολών και όχι όλου του client ή του server όπως πχ αν κάνω threads ξεχωριστά για listening ή για connect τι πρέπει να βάλω?newsockfd ενώ στο listening sockfd?Επίσης σαν 4α ορίσματα των socket threads αν κάνω?την server adress??

7.Για να γίνει αυτή η επαναληψιμότητα τόσο στο διάβασμα των μηνυμάτων όσο και στο ένας server να μπορεί να εξυπηρετήσει πολλούς clients και ένας client να μπορεί να εξυπηρετήσει πολλούς servers(ποιο από τα δύο είναι απαραίτητο??) πρέπει να
βάλω είτε την connect είτε την listen μέσα σε επανάληψη ίση με τον αριθμό των nodes που θα έχουμε??
Πρέπει να κάνω κάτι αντίστοιχο είτε κάνω socket threads είτε όχι και για τα node sockets που τυχόν θα δημιουργηθούν αν γίνει ένα connection ή όχι??

8.Αυτό που λέει στην εκφώνηση της εργασίας <<Αποστέλλονται όλα τα μηνύματα που δεν έχουν σταλεί στον συγκεκριμένο παραλήπτη στο παρελθόν>> πώς το κάνουμε?Ελέγχουμε το socket που μας στέλνει ο client??και πριν στείλουμε κάτι ελέγχουμε τι έχει μέσα στον buffer μας??Επίσης αντίγραφα από τον buffer πρέπει να κρατάει και ο server και ο client????Επομώνως εν τέλει πρέπει να βάλω 2 buffer διαφορετικούς?1 για τον server κι έναν για τον client?Ή θα χειρίζονται και οι 2 τον ίδιο buffer πχ με κάποιο mutex??
Από το socket πρέπει να στέλνουμε 1-1 μήνυμα τη φορά επίσης ή όλα μαζί?Εγώ δεν ξέρω να το κάνω όλα μαζί..μόνο μήνυμα μήνυμα..
Τέλος σε περίπτωση που είναι 1 τελικά ο buffer στον buffer αποθηκεύονται μόνο αυτά που λαμβάνονται(όπως και αναφέρει?)ή και αυτα που δημιουργούνται και αποστέλλονται??Αυτό δεν το ξεκαθαρίζει!!

Τον τρόπο με το I/O Multiplexing άστον καλύτερα γιατί πρώτον πρέπει ακόμα να μάθω τα βασικά Tongue
Δεύτερον όπως είπες κι εσύ για 10 ΑΕΜ να κάτσω να ασχοληθώ με την select() δεν έχει τόσο νόημα..Απλά σε ρώτησα για να πάρω μια ιδέα..

Τελείωσα με τις ερωτήσεις Tongue Tongue  Grin Grin

Όπως και να χει χίλια ευχαριστώ για τις απαντήσεις σου..Αν μου απαντήσεις και σε αυτές πιστεύω με κάλυψες....
 Roll Eyes Roll Eyes Roll Eyes Roll Eyes
« Last Edit: August 18, 2019, 07:46:13 am by geormich » Logged
mano_lee
Καταξιωμένος/Καταξιωμένη
***
Gender: Male
Posts: 151


meh'


View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #96 on: August 26, 2019, 13:36:26 pm »

Ενώ ο κώδικας μου δουλεύει ολόσωστα για 2 pi, όταν δοκιμάζουμε να το τρέξουμε από 3 pi (και λογικά και παραπάνω), από κάποιο σημείο και μετά αποθηκεύει στη λίστα π.χ. σε μία θέση, δύο ή και παραπάνω μηνύματα ενωμένα αντί για ένα.

Σκέφτηκα μήπως το index της λίστας δεν προλαβαίνει να ανανεωθεί για κάποιον λόγο και πάει και κολλάει το επόμενο μήνυμα στην ίδια θέση.

Το έχω ελέγξει πάρα πολύ και δε βρίσκω κάποιο λάθος στον κώδικα, οπότε το ρωτάω σε περίπτωση που είχε και κάποιος άλλος το ίδιο πρόβλημα. Π.χ. μπορεί να φταίει κάτι με τα threads.

SOLVED: Στην συνάρτηση send στο όρισμα που βάζουμε με strlen, ήθελε ένα "+1" στο τέλος για να πάρει και τον τελευταίο χαρακτήρα του μηνύματος που ήταν το '\0'.
« Last Edit: August 26, 2019, 17:29:13 pm by mano_lee » Logged

Allah allah allah will pray for you
delta
Θαμώνας
****
Gender: Male
Posts: 319


Δ.ΕΛ.Τ.Α


View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #97 on: August 30, 2019, 15:07:19 pm »

Παιδια μπορειτε να μου πειτε τι ακριβως κανατε για να αναγνωρισει το πσ σας το raspberry.ποια καλωδια συνδεσατε?το παλευω αλλα δεν βγαζω ακρη
Logged

The quieter you become,the more you are able to hear.
mano_lee
Καταξιωμένος/Καταξιωμένη
***
Gender: Male
Posts: 151


meh'


View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #98 on: August 30, 2019, 15:23:11 pm »

Quote from: delta on August 30, 2019, 15:07:19 pm
Παιδια μπορειτε να μου πειτε τι ακριβως κανατε για να αναγνωρισει το πσ σας το raspberry.ποια καλωδια συνδεσατε?το παλευω αλλα δεν βγαζω ακρη

Η βάζεις το καλώδιο στη θύρα USB του pi Αν θες να συνδεθείς μέσω ethernet, ή το βάζεις απλά στη θύρα PWR και συνδέεσαι στο wifi (piZero-ESPX). Το καλώδιο να είναι ένα απλό micro usb type πχ από ένα κινητό.

Αν τυχόν δεν ανάβει LEDακι στο pi Η δοκίμασε άλλο καλώδιο ή ξανάκανε εγκατάσταση το img Γιατί λογικά έγινε με λάθος τρόπο.
« Last Edit: August 30, 2019, 15:25:37 pm by mano_lee » Logged

Allah allah allah will pray for you
delta
Θαμώνας
****
Gender: Male
Posts: 319


Δ.ΕΛ.Τ.Α


View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #99 on: August 30, 2019, 15:26:31 pm »

Quote from: mano_lee on August 30, 2019, 15:23:11 pm
Η βάζεις το καλώδιο στη θύρα USB του pi Αν θες να συνδεθείς μέσω ethernet, ή το βάζεις απλά στη θύρα PWR και συνδέεσαι στο wifi (piZero-ESPX).

Αν τυχόν δεν ανάβει LEDακι στο pi Η δοκίμασε άλλο καλώδιο ή ξανάκανε εγκατάσταση το img Γιατί λογικά έγινε με λάθος τρόπο.

δηλαδη για να καταλαβω

βαζω την sd καρτα στο raspberry
και συνδεω με καλωδιο το pwr με θυρα του υπολογιστη?
Logged

The quieter you become,the more you are able to hear.
mano_lee
Καταξιωμένος/Καταξιωμένη
***
Gender: Male
Posts: 151


meh'


View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #100 on: August 30, 2019, 15:34:41 pm »

Quote from: delta on August 30, 2019, 15:26:31 pm
δηλαδη για να καταλαβω

βαζω την sd καρτα στο raspberry
και συνδεω με καλωδιο το pwr με θυρα του υπολογιστη?

Το pi γενικά χρειάζεται τροφοδοσία. Οπότε αυτήν θα την πάρει από το pc σου, άρα ναι, το καλώδιο θα το συνδέσεις σε ένα USB Port του pc σου.

Επίσης ναι συνδέεις την κάρτα sd, γιατί από εκεί ουσιαστικά θα φορτώσει το λογισμικό που του έβαλες (το image δηλαδή που μας έδωσε ο πιτσιάνης).

Το που θα το συνδέσεις στο pi εξαρτάται από το πώς θέλεις να συνδεθείς. Είτε στο port "USB" αν θες να γίνει η σύνδεση μέσω του καλωδίου, είτε στο port "PWR" αν θες να γίνει η σύνδεση μέσω του wifi που εκπέμπει το pi. Οι δυο ενδείξεις, USB και PWR υπάρχουν επάνω στο pi με μικρά γράμματα, ακριβώς δίπλα στις 2 θύρες που έχει.
« Last Edit: August 30, 2019, 17:03:35 pm by mano_lee » Logged

Allah allah allah will pray for you
delta
Θαμώνας
****
Gender: Male
Posts: 319


Δ.ΕΛ.Τ.Α


View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #101 on: August 30, 2019, 15:37:12 pm »

Quote from: mano_lee on August 30, 2019, 15:34:41 pm
Το pi γενικά χρειάζεται τροφοδοσία. Οπότε αυτήν θα την πάρει από το laptop σου, άρα ναι, το καλώδιο θα το συνδέσεις σε ένα USB Port του laptop σου.

Επίσης ναι συνδέεις την κάρτα sd, γιατί από εκεί ουσιαστικά θα φορτώσει το λογισμικό που του έβαλες (το image δηλαδή που μας έδωσε ο πιτσιάνης).

Το που θα το συνδέσεις στο pi εξαρτάται από το πώς θέλεις να συνδεθείς. Είτε στο port "USB" αν θες να γίνει η σύνδεση μέσω του καλωδίου, είτε στο port "PWR" αν θες να γίνει η σύνδεση μέσω του wifi που εκπέμπει το pi. Οι δυο ενδείξεις, USB και PWR υπάρχουν επάνω στο pi με μικρά γράμματα, ακριβώς δίπλα στις 2 θύρες που έχει.

βαζω την καρτα στο raspberry
και συνδεω με καλωδιο το pwr με τον υπολογιστη μου.
το λαμπακι δεν αναβει
Logged

The quieter you become,the more you are able to hear.
mano_lee
Καταξιωμένος/Καταξιωμένη
***
Gender: Male
Posts: 151


meh'


View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #102 on: August 30, 2019, 15:41:01 pm »

Quote from: delta on August 30, 2019, 15:37:12 pm
βαζω την καρτα στο raspberry
και συνδεω με καλωδιο το pwr με τον υπολογιστη μου.
το λαμπακι δεν αναβει

3 πράγματα μπορεί να φταίνε:

1) Δοκίμασε άλλο port στο pc σου
2) Δοκίμασε άλλο καλώδιο
3) Αν τίποτα απ αυτά δε φταίει, τότε μάλλον δεν έχεις γράψει σωστά το img στην sd card. Κάντο λοιπόν όλο απ' την αρχή. Format την sd card, και ξανά βάλε το img. Δοκίμασε αν θες το πρόγραμμα balenaEtcher για το img, και όχι τον τρόπο του Πιτσιάνη, είναι πολύ πιο απλό και δουλεύει.
« Last Edit: August 30, 2019, 17:03:47 pm by mano_lee » Logged

Allah allah allah will pray for you
delta
Θαμώνας
****
Gender: Male
Posts: 319


Δ.ΕΛ.Τ.Α


View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #103 on: August 30, 2019, 20:18:29 pm »

Quote from: mano_lee on August 30, 2019, 15:41:01 pm
3 πράγματα μπορεί να φταίνε:

1) Δοκίμασε άλλο port στο pc σου
2) Δοκίμασε άλλο καλώδιο
3) Αν τίποτα απ αυτά δε φταίει, τότε μάλλον δεν έχεις γράψει σωστά το img στην sd card. Κάντο λοιπόν όλο απ' την αρχή. Format την sd card, και ξανά βάλε το img. Δοκίμασε αν θες το πρόγραμμα balenaEtcher για το img, και όχι τον τρόπο του Πιτσιάνη, είναι πολύ πιο απλό και δουλεύει.

αν ας πουμε μου πανε ολα στραβα .. η εργασια δεν μπορει να γινει απλα με προγραμμα κανονικο σε Linux?
γιατι και τ qemu βγαζει καποια ερρορ
γτ σκεφτομαι αν ειναι να κανω εργασια client/server σε C απλα δεν θα το βαλω πανω στο raspberry
ετσι και αλλιως ενα 5αρι θελω ( μονο αυτο το μαθημα εχω )
« Last Edit: August 30, 2019, 20:21:09 pm by delta » Logged

The quieter you become,the more you are able to hear.
mano_lee
Καταξιωμένος/Καταξιωμένη
***
Gender: Male
Posts: 151


meh'


View Profile
Re: [Eνσωματωμένα] Εργασίες 2019
« Reply #104 on: August 30, 2019, 20:31:32 pm »

Quote from: delta on August 30, 2019, 20:18:29 pm
αν ας πουμε μου πανε ολα στραβα .. η εργασια δεν μπορει να γινει απλα με προγραμμα κανονικο σε Linux?
γιατι και τ qemu βγαζει καποια ερρορ
γτ σκεφτομαι αν ειναι να κανω εργασια client/server σε C απλα δεν θα το βαλω πανω στο raspberry
ετσι και αλλιως ενα 5αρι θελω ( μονο αυτο το μαθημα εχω )


Γενικά μπορείς να το κάνεις και να επικοινωνείς τοπικά στο pc σου για να δοκιμάζεις. Αν το κάνεις έτσι όμως και πας να δοκιμάσεις να το τρέξεις με κάποιον που το τρέχει στο pi του, εσύ θα μπορείς να στείλεις στο pi από το pc σου αλλά νομίζω πως δε γίνεται κάποιο pi να στέλνει σε σένα (θα λειτουργείς δηλαδή μόνο σαν client).

Τώρα για το πώς θα βαθμολογούσε μια εργασία που δεν έγινε σε pi η zsun δεν έχω ιδέα. Αν είναι και το τελευταίο σου τότε στείλτου ένα mail για σίγουρα.
« Last Edit: August 30, 2019, 20:34:40 pm by mano_lee » Logged

Allah allah allah will pray for you
Pages: 1 ... 5 6 [7] 8 9 10 Go Up Print
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Scribbles2 | TinyPortal © Bloc | XHTML | CSS
Loading...