Inhaltsverzeichnis |
Jeder, der einmal auf einer LAN-Party war, oder ein Heimnetzwerk verwaltet kennt das Problem: Man möchte einer bestimmten Person eine Nachricht übermitteln, ohne dass diese von den anderen gehört wird. Viele müssen jetzt aufstehen und zu der entsprechenden Person laufen. Doch sollte dies öfter der Fall sein, kann das ganz schön stressig sein. Darum zeige ich euch hier, wie man einen Chat für ein lokales Netzwerk erstellt.
Um unser Vorhaben umzusetzen, brauchen wir eine geeignete Programmiersprache. Ich habe mich für Visual Basic 6.0 (VB 6) entschieden, da diese gut dokumentiert und leicht zu erlernen ist. Außerdem besitzt sie eine vollständige Entwicklungsumgebung mit grafischer Designoberfläche.
Öffnet die VB-IDE und startet ein neues Standard-EXE-Projekt
Nun müsst ihr das Winsock-Steuerelement laden. Dazu klickt ihr auf die Werkzeugleiste (links) mit der rechten Maustaste und klickt auf Komponenten. Nun sucht ihr in der Liste Microsoft Winsock, klickt auf das Häckchen davor und schließt das Fenster mit einem Klick auf OK.
Nun wird es Zeit, sich zu überlegen welche Funktionen unser Chat alles enthalten soll:
Das sollte für den Anfang erstmal an Funktionen genügen.
Da dies nur ein kleines Programm wird, können wir unser Protokol sehr einfach halten. Der Protokolaufbau sieht so aus:
Code Trennzeichen Nachricht Trennzeichen
Als Trennzeichen legen wir ein sog. nichtdruckbares Zeichen mit dem ASCII-Code 0 fest. (In VB: Chr(0))
Für unser Protokol müssen wir ein paar Codes für die Datenübertragung festlegen. Unsere Codes bestehen aus drei Großbuchstaben.
Erzeugt nun ein neues Modul. Dies könnt ihr tun, indem ihr im Projektexplorer (rechts oben) rechts klickt und im Menü Hinzufügen auf Modul klickt. Gebt dem Modul den Namen modProtocol.
Gebt nun folgenden Programmcode in das Modul ein:
Option Explicit
Public Function Message(ByVal Subject as String, ByVal Nachricht as String) As String
Message = Subject & Chr(0) & Nachricht & Chr(0)
End Function
Mehr müssen wir für unser Protokol nicht tun.
Benenne Form1 in frmMain um und füge die zwei Textbox - Steuerelemente und ein CommandButton - Steuerelement aus der Werkzeugleiste (links) ein. Die Form sollte dann etwa so aussehen:
Weise den Objekten folgende Eigenschaften zu:
frmMain: Caption: Name deines Chats (zb. NetChat)
TextBox1 (sollte die größere der beiden sein):
TextBox2:
CommandButton1:
Außerdem muss noch ein Winsock - Steuerelement auf der Form platziert werden. Dabei spielt es keine Rolle, wo es platziert wird, da es zur Laufzeit unsichtbar ist.
Klicke nun mit der rechten Maustaste auf eine freie Stelle auf der Form und auf Code anzeigen. Gib nun folgende Zeilen in das Fenster ein:
Option Explicit Dim Username As String Dim data As String Dim datasplit() As String
Private Sub cmdSenden_Click()
Select Case Left$(txtUserinput.Text, 3)
Case "/me"
Replace txtUserinput.Text, "/me", ""
Message "MET", txtUserinput.Text
Winsock1.SendData Message
Case "/wp"
Replace txtUserinput.Text, "~",Chr(0)
Replace txtUserinput.Text, "/wp", ""
Message "WSP", txtUserinput.Text
Winsock1.SendData Message
Case "/st"
Replace txtUserinput.Text, "/st", ""
Message "STA", txtUserinput.Text
Winsock1.SendData Message
Case Else
Message "MSG", txtUserinput.Text
Winsock1.SendData Message
End Select
End Sub
Private Sub Form_Load()
Winsock1.RemotePort = 52306
Winsock1.RemoteIP = InputBox("Bitte geben Sie die IP-Adresse des Servers ein.", "Serveradresse")
Username = InputBox("Wie möchten Sie heißen?", "Username")
Winsock1.Connect
End Sub
Private Sub txtUserinput_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
cmdSenden_Click
End If
End Sub
Private Sub Winsock1_Connect()
Winsock1.SendData Username
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData data
datasplit = Split(data, Chr(0))
Select Case datasplit(0)
Case "MSG"
txtText.Text = txtText.Text & "<" & datasplit(1) & "> " & datasplit(2) & vbCrLf
Case "WSP"
If datasplit(2) = Username Then
txtText.Text = txtText.Text & "<" & datasplit(1) & ">(@whisper) " & datasplit(2) & vbCrLf
End If
Case "MET"
txtText.Text = txtText.Text & datasplit(1) & datasplit(2) & vbCrLf
Case "STA"
txtText.Text = txtText.Text & "<" & datasplit(1) & ">(State) " & datasplit(2) & vbCrLf
Case Else
txtText.Text = txtText.Text & datasplit(1) & " has joined the channel." & vbCrLf
End Select
End Sub
Wie ihr sicherlich schon bemerkt habt, braucht unser Chat noch einen Server auf den er verbinden kann. Öffnet also ein neues Standard-Exe-Projekt, fügt das Winsock - Steuerelement in die Werkzeugleiste ein und platziert eines auf der Form. Die Form bekommt den Namen frmServer und das Winsock-Control den Namen sckServer. Die Visible - Eigenschaft der Form muss auf False gestellt werden. Die Index - Eigenschaft des Winsock-Controls müsst ihr auf 0 stellen.
Fügt für den Server nun folgenden Programmcode ein:
Option Explicit Dim data As String Dim intMax As Integer Dim i As Integer
Private Sub Form_Load()
intMax = 1
sckServer(0).LocalPort = 52306
sckServer(0).Listen
End Sub
Private Sub sckServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
intMax = intMax + 1
Load sckServer(intMax)
sckServer(intMax).LocalPort = 52306
sckServer(intMax).Accept requestID
End Sub
Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
sckServer(Index).GetData data
On Error Resume Next
For i = 0 To intMax Step 1
sckServer(i).SendData data
Next i
End Sub
Um die Programme nun unter Windows lauffähig zu machen, öffnet ihr das entsprechende Projekt und klickt auf Start -> Projekt1.exe erstellen. Startet nun zuerst den Server und anschließend den Clienten. Gebt nun für die Server-IP localhost ein und einen beliebigen Nicknamen. Anschließend könnt ihr los chatten. Wenn der Server nicht auf eurem Computer läuft, müsst ihr dementsprechend die IP des Computers angeben, auf dem der Server läuft. Um zu flüstern, gebt ihr in die Textbox /wp username~nachricht ein. Für um eueren Status zu ändern gebt /st status ein.
Dies ist natürlich ein sehr einfaches Programm. Hier noch ein paar Ergänzungsvorschläge (Anleitungen folgen bei Gelegenheit):
Viel Spass beim Chatten!
Nemesis