|
Ich habe in meinen Texten immer davon gesprochen, dass es recht einfach ist, eine Internetverbindung
zu realisieren. Ein paar Zeilen Programmcode sollen dies bewerkstelligen. Hier will ich an einem
Beispielprogramm zeigen, dass es wirklich einfach ist, wenn man die Winsock Control zur Hilfe
nimmt. Hier sind einige Funktionen bereits vorgefertigt.
Um es vorwegzusagen: diese beiden beschriebenen Programme sind wirklich nur Demoprogramme und haben
lediglich die notwendigen Grundfunktionen eingebaut, die für eine Kommunikation notwendig sind.
Zunächst einmal beide Programme in Funktion:
oben der Server und als zweites Bild der Client.
Beginnen wir mit der Entwicklung des Servers. Wir benötigen lediglich eine Textbox, deren
Eigenschaft auf Multiline gestellt wird. Und dann müssen zwei Winsock - Controls geladen werden.
Das Programm in der Entwicklung ist unten zu sehen.
Bei der Darstellung des Programmcodes wird es ersichtlich, dass es wirklich kein Kunstwerk ist.
Und dennoch stellt dieses kleine Programm schon einen kompletten Server dar. Natürlich fehlen jegliche
Feinheiten, die später eingebaut werden können.
Private Sub Form_Load()
Winsock1.LocalPort = 1001
Winsock1.Listen
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock2.LocalPort = 1001
Winsock2.Accept requestID
Caption = "connected"
End Sub
Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Winsock2.GetData data
Text1 = data
Winsock2.SendData data
End Sub
Was passiert nun in diesem Programm? Wird das Programm hochgefahren, so wird zuerst Sub Form_Load
durchlaufen. Hier wird der ersten Winsock - Control mitgeteilt, dass wir den Port 1001 nutzen
wollen. Dieser Port wird bei den meisten Chats benutzt.
Die Winsock erhält weiterhin den Auftrag, die Leitung zu beobachten, zu listen (hören).
Wenn sich hier etwas tut,z.B. eine Anforderung vom Clienten, so wird das Event Winsock1_ConnectionRequest
aktiviert.
Hier wird jetzt der zweiten Winsock - Control auf ihre Aufgabe vorbereitet. Zum einen wird ihr der gleiche
Port 1001 zugewiesen. Zum anderen nimmt sie die Anforderung des Clienten an und akzeptiert die Verbindung
zum Clienten. In der Ereignisprozedur wird eine Variable requestID mitgeliefert. Diese wird zur
Kennung der Verbindung eingegeben.
Jetzt ist der Server mit dem Client verbunden und die Datenkommunikation kann stattfinden. Werden Daten
empfangen, so wird das Ereignis Winsock2_DataArrival(ByVal bytesTotal As Long) aufgerufen.
Jetzt ist es einfach, die Daten abzuholen. Nachdem die Variable data als string dimensioniert wurde, kann sie
jetzt über den Befehl Winsock2.GetData data eingelesen werden und in der Textbox dargestellt werden.
Da der Server als Echomaschine programmiert wurde, sendet er selbst jetzt an den Clienten die empfangenen Daten
mit Winsock2.SendData data zurück.
Das wärs dann schon mit dem Server. Ähnlich einfach gibt sich der Client. Unten das Programm in der Entwicklungsumgebung.
Hier wird lediglich eine Winsock Control und zwei Textboxen benötigt. Die eine zeigt die Meldungen des Servers an und
die zweite Box dient zur Eingabe des eiegenen Textes.
Der benötigte Programmieraufwand ist ähnlich gering wie der Serverapplikation. Die Aufrufe sind ähnlich und nahezu
selbstredend.
Private Sub Form_Load()
Caption = Winsock1.LocalIP
Winsock1.RemoteHost = winsock1.LocalIP 'IP des Servers
Winsock1.RemotePort = 1001 'Port zum Verbinden
Winsock1.Connect
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Winsock1.SendData Text2.Text + vbCrLf
Text2 = ""
End If
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Winsock1.GetData data
Text1 = Text1 + data
End Sub
Wir beginnen wieder mit dem Sub Form_Load . Zunächst muss der Control die IP-Adresse des Servers
mitgeteilt werden. Da diese Programme dafür gedacht sind, auf dem eigenen Rechner als Demo zu laufen, wird
die eigene IP-Adresse eingesetzt. Die eigene IP-Adresse erhält man mit Winsock1.LocalIP. Diese wird
dann der Control über Winsock1.RemoteHost = winsock1.LocalIP mitgeteilt. Ebenso wird der gleiche
Port gewählt, der zur Kommunikation dienen soll: Winsock1.RemotePort = 1001
Und schließlich kommt der wichtigste Teil: die Control wird aufgefordert, die Verbindung zum Server
herzustellen: Winsock1.Connect . Damit wären die Vorbereitungen bei dem Clientprogramm abgeschlossen und
die Datenkommunikation kann beginnen.
Sie wird in der gleichen Weise durchgeführt, wie oben beim Server beschrieben. Die selbst eingetippten Daten werden
über Winsock1.SendData Text2.Text + vbCrLf dem Server zugeleitet. Das vbCrLF am Ende nach dem Text
bedeuetet, dass ein Carriage Return + LineFeed (Zeilenvorschub) mitgesendet wird, damit
im Anzeigefenster des Servers auf eine neue Zeile geschaltet wird.
Wenn der Server das Echo schickt, so wird wieder die Ereignisroutine Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
aktiv. Jetzt fehlen nur noch die EXE - Dateien für die, die kein Entwicklungssystem haben oder nicht programmieren können.
Hinweis: Zuerst wird das Serverprogramm aufgerufen, dann der Client.
Sever_testdemo.exe als Serverprogramm (20 KB) laden
Client_testdemo.exe als Clientprogramm (20 KB) laden
Natürlich muss die Runtime für VB6 und die Winsockcontrol auf dem Rechner installiert sein. Falls sie fehlen: es gibt sie
unter Chat/Webcam in meinem Programm.
|