server - client

Καθώς οι συσκευές που υποστηρίζουν δίκτυο αρχίζουν να πληθαίνουν (δικτυακές κάμερες, ιντερνετικά ραδιόφωνα, media stremers αλλά και άλλες συσκευές ελέγχου και αυτοματισμού), γίνεται όλο και ποιο ενδιαφέρον να αρχίσει κανείς να φτιάχνει προγράμματα που λειτουργούν σε περιβάλλον διτκύου (LAN ή και Internet). Μια εύκολη αρχή είναι οι εφαρμογές server - client και μάλιστα ο προγραμματισμός τους σε μια εύκολη γλώσσα όπως είναι η Visual basic. Μπορεί κανείς με αναζήτηση να βρει πολλά κομάτια κώδικα τα οποία εύκολα τα προσαρμόζει στην εφαρμογή που θέλει. Η πρώτη ενέργεια που πρέπει να γίνει είναι να εισάγει στην φόρμα της εφαρμογής client από το toolbox ένα αντικείμενο τύπου Microsoft winsock control. Για να προστεθέι αυτό το αντικείμενο στα διαθέσιμα αντικείμενα στο toolbox πρέπει πρώτα να το εγκαταστήσεουμε πηγαίνοντας από το μενού project -> components.. στο tab controls και τσεκάροντας το κουτάκι Microsoft winsock control από την διαθέσιμη λίστα. Αφού εισάγουμε ένα αντικείμενο τύπου winsock και του δώσουμε το όνομα winsock1, ο κώδικας στην εφαρμογή client για να συνδεθούμε με έναν υπολογιστή που βρίσκεται στο δίκτυό μας σε μια συγκεκριμένη διεύθυνση IP1 και "ακούει" σε μια συγκεκριμένη θύρα port1, είναι :

wsock1.RemoteHost = IP1 ' η διεύθυνση IP1 μπορεί να οριστεί πχ σε 192.168.0.1
wsock1.RemotePort = Port1 ' το port1 μπορεί να είναι πχ. η θύρα 180
wsock1.Connect '' Η εντολή αυτή αρχικοποιεί μια σύνδεση με τον απομακρισμένο υπολογιστή server

Στην πλευρά του server θα πρέπει να εισάγουμε στην φόρμα μας ένα αντικείμενο winsock πχ με το όνομα data_bus και να ορίσουμε στις ιδιότητές του LocalPort ίσο με την τιμή port1 της εφαρμογής client. ο κώδικας στην εφαρμογή server για να "ακούει" σε μια συγκεκριμένη θύρα port1, είναι :

Form1.Refresh
Do
If data_bus.State <> sckConnected And data_bus.State <> sckListening Then 'Is the connection available or do we listen to the port?
data_bus.Close 'All the connections are switched off
data_bus.Listen ''Listen port 180
End If
DoEvents
Loop

Private Sub data_bus_ConnectionRequest(ByVal requestID As Long) 'Request for connection
data_bus.Close 'Listen close
data_bus.Accept requestID 'Let's tap a Client with the number of his request.
End Sub

Private Sub data_bus_DataArrival(ByVal bytesTotal As Long)
Dim Data As String 'Variable Data
data_bus.GetData Data 'It will contain the received data
End Sub

Το πρώτο κομάτι κώδικα μέχρι την εντολή loop, πρέπι να το περιλάβουμε στην ρουτίνα φόρτωσης της φόρμας μας, δηλαδή την Private Sub Form_Load(). Το τμήμα αυτό ανιχνεύει εάν υπάρχει ενεργή σύνδεση στην προεπιλεγμένη θύρα, που στην εφαρμογή μας μπορεί να είναι η 180. Το δεύτερο τμήμα κώδικα η ρουτίνα data_bus_ConnectionRequest(ByVal requestID As Long), αποδέχεται την αίτηση σύνδεσης και δίνει σε αυτή έναν χαρακτηριστικό αριθμό σύνδεσης τον requestID. Στο τρίτο τμήμα της ρουτίνας data_bus_DataArrival(ByVal bytesTotal As Long), αποθηκεύεται στην μεταβλητή Data, το αλφαριθμητικό (string) που έλαβε από την εφαρμογή clent. Εν συνεχεία η μεταβλητή αυτή μπορεί να δρομολογήσει ενέργειες ή ανάλογες απαντήσεις του προγράμματος server προς τον client.