Mit dem Winsockcontrol einen Chat erstellen
Bedingungen:
Visual Basic 6.0 Professional oder Enterprise ( für das Winsockcontrol)
Gewisse Vorkenntnisse in Visual Basic ( Was ist ein Commandbutton, Textfeld)
Ich hab dieses Tutorial in verschiedene Kapitel eingeteilt. Ich hoffe ich kann euch damit helfen.
Kapitel 1 - Der Zwei Personen Chat
Das Beispielprojekt findet ihr im Ordner „Kapitel 1“
Schritt 1:
Öffne eine normale Form. Damit das ganze Programm auch geht, gehst du nun in der Menüleiste auf Projekte/Komponente.
Schritt 2:
Suche den MSNWinsock Kontrol, klicke es an und klicke dann auf Übernehmen
Jetzt müsstest du in der Werkzeugleiste ein neues Symbol haben.
Schritt 3:
Platziere jetzt eines dieser Symbole auf der Form und nenne es:
TcpServer
Jetzt nenne deine Form auch mal anders:
Name = frmServer
Caption = Server
Jetzt platziere zwei Textfelder auf der Form. Nenne eins txtEmpfangen und txtSenden. Setze bei beiden die Eigenschaft Multiline auf True, das sorgt dafür das man mehrere Zeilen schreiben kann.
Dann platziere auf der Form noch einen Commandbutton mit diesen Eigenschaften:
Name = cmdListen
Caption = Listen
Zusätzlich dann noch einen Commandbutton mit diesen Eigenschaften:
Name = cmdSenden
Caption Senden
So weit erstmal..
Jetzt noch eine Zweites Projekt starten, mit den gleichen Komponenten, nur dass das Winsockcontrol „TcpClient“ heißt , der Commandbutton „CmdClient“ und die Captioneigenschaft „Connect“ ist. Außerdem sollte die neue Form in „frmClient“ und „Client“ umbenannt werden.
Hier noch mal eine kurze Zusammenfassung:
FrmServer Name = frmServer Caption = Server
TcpServer Name = TcpServer
CmdListen Name = cmdListen Caption = Listen
TxtEmpfangen Name = txtEmpfangen Multiline = True
TxtSenden Name = txtSenden Multiline = True
TcpClient Name = TcpClient
FrmClient Name = frmClient Caption = Client
CmdConnect Name = cmdConnect Caption = Connect
CmdSenden (2 mal) Name = cmdSenden Caption = Senden
Schritt 4:
Klicke bei frmServer doppelt auf die Form. Füge dann folgenden Code ein:
Private Sub Form_Load()
TcpServer.LocalPort = 1001 ' Hier wird der Port festgelegt. Unbedingt erforderlich.
End Sub
Dem Winsockcontrol wird hier ein Port zugewiesen, der später auch der Chat unbedingt braucht. Der Server bzw. der Client braucht den Port um den jeweils anderen auch zu finden.
Als nächsten öffne den Code für cmdListen und schreib darein:
Private Sub cmdListen_Click()
TcpServer.Listen 'Hier wird gesagt, dass der Server auf das Connecten des Client warten
' soll.
End Sub
Das Winsockcontrol hört jetzt auf dem entsprechendem Port ab, ob jemand auf dem selben Port auf seinen Computer connectet.
Jetzt muss festgelegt werden, was passieren soll, wenn ein anderer Connectet.
Private Sub TcpServer_ConnectionRequest(ByVal requestID As Long)
If TcpServer.State <> sckClosed Then TcpServer.Close
TcpServer.Accept requestID
MsgBox "Jemand ist der Unterhaltung zugestiegen."
End Sub
Wenn jemand Connectet, wird diese Prozedur aufgerufen. Zuerst wird gefragt ob TcpServer.State ungleich sckclosed ist und wenn das so ist, dann wird die Verbindugn geschlossen, damit die neuen akzeptiert werden kann. In der nächsten Zeile wird dann die Verbindung bestätig, aber jetzt kann man mit dem Winsockcontrol Daten austauschen.
Dann wird per MsgBox gesagt das jemand zu der Unterhaltung hinzugestiegen ist.
Jetzt sollte man mal gucken, wie das denn mit dem Connecten des Clients geht. Ruf dazu die Form frmClient auf und schreibe bei Form_Load folgenden Code rein.
Private Sub Form_Load()
Dim Computername As String
Computername = InputBox("Geben sie bitte den Computername des Servers an.")
TcpClient.RemoteHost = Computername
TcpClient.RemotePort = 1001
End Sub
Zuerst wird per Inputbox der Computername des Servers abgefragt. Man braucht nämlich um zu einem anderen Server zu connecten 2 Sachen. Einmal den Computername und zum anderen den Port. Der Port ist hier schon festgelegt, der Computername muss eingegeben werden. Dann werden Port und Computername dem Winsockcontrol zugeteilt.
Als nächstes kommt, wie man als Client dann zum Server connectet.
Vorsicht:
Der Server muss auf Listen sein, bevor man connecten kann.
Zum Connecten muss folgender Code bei cmdConnect reingeschrieben werden:
Private Sub cmdConnect_Click()
TcpClient.Connect
End Sub
Hier wird jetzt zum Server connectet. Sollte der Computername und Port richtig sein, besteh jetzt eine Verbindung zwischen Client und Server.
Als nächstes wollen wir dann natürlich auch chatten. Dazu kommt bei frmServer in dem Code von cmdSenden folgender Code rein.
Private Sub cmdSenden_Click()
TcpServer.SendData txtSenden
txtSenden = ""
End Sub
Hier wird der Text der eingegeben wird verschickt( SendData ) und danach wird der Text wieder aus der Txt-Datei gelöscht.
Damit der andere die Datei empfangen kann, muss folgender Code hinzugefügt werden bei frmClient:
Private Sub TcpClient_DataArrival(ByVal bytesTotal As Long)
Dim s$
TcpClient.GetData s
txtEmpfangen = txtEmpfangen & s
End Sub
Sollte jetzt ein Datei gesendet werden, wird diese Datei mit dem Befehl GetData geholt und in einen String, hier s, gespeichert. Dieser String wird einfach an den txtEmpfangen dran gehängt. Jetzt kann der Server schon schreiben und der Client das geschriebene sehen. Damit das auch anders rum geht muss nur noch folgender Code beim frmServer eingefügt werden.
Private Sub TcpServer_DataArrival(ByVal bytesTotal As Long)
Dim s$
TcpServer.GetData s
txtEmpfangen = txtEmpfangen & s
End Sub
Wie sie sehen fast das gleiche wie oben. Jetzt noch bei frmClient bei cmdSenden deisen Code einfügen:
Private Sub cmdSenden_Click()
TcpClient.SendData txtSenden
txtSenden = ""
End Sub
Das war es eigentlich schon soweit. Wenn sie jetzt beide Formen starten und Listen bzw. Connecten müssten sie zu zweit chatten können.
Das war Kapitel 1. Ich hoffe es hat alles geklappt. Anregungen und Verbesserungen an mace@mg-schulz.de . Beide VBP-Dateien liegen in Formen und Exe-Dateien in dem Ordner Kapitel 1.
Zusammenfassung der Befehle:
Winsock.DataArrival(Byval bytesTotal as Long) Winsock.GetData S Eine geschickte Datei wird empfangen und in einem String gespeichert.
Winsock.SendData Quelle Eine Datei wird per Winsock verschickt. Sollte die Quelle ein Text sein, dann so schreiben: Winsock.SendData „Hallo“
Winsock.Connect Du bist Client und Connectes mit einem Server. Erforderlich: Winsock.RemoteHost = Computername Des Servers Winsock.RemotePort = Port des Servers
Winsock.Listen Du bist Server und willst auf das Connecten eines Clienten warten. Erforderlich: Winsock.LocalPort = Irgendein Port, bevorzugt 1001