Δημήτρη,
Τα TCP connunication δουλεύει με ένα συγκεκριμένο τρόπο:
Ο server κάνει listen σε κάποιο συγκεκριμένο port.
Ο client μπορεί να κάνει request για να συνδεθεί στο συγκεκριμένο port.
Ο server έχει τις εξής επιλογές εκείνη την στιγμή:
- να ανοίξει την επικοινωνία στο ίδιο port που κάνει listen για να λάβει δεδομένα,
- να ανοίξει ένα άλλο νέο port, να προωθήσει το request στο νέο port και να ανοίξει την επικοινωνία στο νέο port,
- να απορρίψει το request και να μην έχουμε ποτέ επικοινωνία
Αν υποθέσουμε ότι ο server ανοίξει ένα port, τότε δέχεται τα δεδομένα που στέλνει ο client.
Το read των δεδομένων που φτάνουν στοport του server, μπορεί να είναι παραπάνω από 1 - μπορεί να χρειαστεί να γίνουν πολλαπλά reads για να διαβαστούν τα δεδομένα που θα φτάσουν - το μέγεθος των δεδομένων που φτάνουν στο port, εξαρτάται από το MTU του δικτύου, συνήθως 1500 ή μικρότερο αν μιλάμε για Ethernet δίκτυα που παίζουν μέ NAT ή VPN και ακόμη μικρότερο, γύρω στα 500 αν δεν κάνω λάθος, για δίκτυα πάνω από τηλέφωνο.
Αφού ο server, λάβει όλα τα δεδομένα - συνήθως το καταλαβαίνει από κάποια ακολουθία χαρακτήρων/bytes στα δεδομένα που φτάνουν - τα επεξεργάζεται και στέλνει την απάντησή του.
Κανονικά σε μια TCP διαδικασία, αφού θα έκλεινε μια ακολουθία αποστολής/απάντησης, ο server θα κλείσει αυτόματα το port που άκουσε/απάντησε.
Στον web server δεν συμβαίνει αυτό, μιας και μπορεί το port να μείνει ανοιχτό, για να εξυπηρετήσει ένα συνεχόμενο request από τον client.
Φαντάζομαι, ότι καταλαβαίνεις ότι να ζητάς να υλοποιήσεις κάτι τέτοιο δεν είναι απλό, του στυλ άνοιξε/διάβασε/απάντησε/κλείσε.
Από την άλλη ο IIS δεν είναι δυνατόν να το κάνει αυτό, γιατί δεν μιλάει σε επίπεδο TCP αλλά σε application protocol, δηλαδή http.
Αν θέλεις να φτιάξεις κάτι που θα έχει αξιόπιστη επικοινωνία, καλύτερα να χρησιμοποιήσεις ένα application protocol - το http στην περίπτωση του IIS - που λύνει από μόνο του το πρόβλημα της υλοποίησης της TCP επικοινωνίας. Έτσι εσύ θα μπορείς να ασχοληθείς με τα δεδομένα που λαμβάνονται, πως θα επεξεργαστούν, και τι θα περιέχει η απάντηση του server.
George J.