Create

Einen LAN-Chat programmieren

Aus Hau-tu.de

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

[bearbeiten] Einleitung

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.


[bearbeiten] Anleitung


[bearbeiten] Die Programmiersprache

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.

[bearbeiten] Der Chat

[bearbeiten] Client

[bearbeiten] Start

Öffnet die VB-IDE und startet ein neues Standard-EXE-Projekt

Bild:vbstart.gif

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.

[bearbeiten] Features

Nun wird es Zeit, sich zu überlegen welche Funktionen unser Chat alles enthalten soll:

  • normale Nachrichtenübertragung
  • Flüsterfunktion
  • /me - Funktion
  • Statusanzeige
  • Punkte verteilen

Das sollte für den Anfang erstmal an Funktionen genügen.

[bearbeiten] Das Protokoll

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))

[bearbeiten] Codes

Für unser Protokol müssen wir ein paar Codes für die Datenübertragung festlegen. Unsere Codes bestehen aus drei Großbuchstaben.

  • MSG - eine normale Nachricht (Message)
  • WSP - Flüsterfunktion (Wisper)
  • MET - /me - Funktion (ME-Tag)
  • STA - Status (State)

[bearbeiten] Protokol schreiben

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.

[bearbeiten] Die Benutzeroberfläche

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:

Bild:vbclient.gif

Weise den Objekten folgende Eigenschaften zu:

frmMain: Caption: Name deines Chats (zb. NetChat)

TextBox1 (sollte die größere der beiden sein):

  • Name: txtText
  • Text: keinen
  • Locked: True
  • ScrollBars: Vertikal
  • Multiline: True

TextBox2:

  • Name: txtUserinput
  • Text: keinen

CommandButton1:

  • Name: cmdSenden
  • Caption: Senden

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.

[bearbeiten] Programmcode

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

[bearbeiten] Der Server

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

[bearbeiten] Verwendung

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.

[bearbeiten] Integration einer einfachen Nachrichtenverschlüsselung

[bearbeiten] Verbesserungsvorschläge

Dies ist natürlich ein sehr einfaches Programm. Hier noch ein paar Ergänzungsvorschläge (Anleitungen folgen bei Gelegenheit):

  • Userliste
  • Smilies
  • Textformatierung
  • Dateiübertragung
  • Umfragen

Viel Spass beim Chatten!

Nemesis

[bearbeiten] Links rund um VB

Presse | Kontakt | Impressum | Anleitungen | Über Hau-tu |Hau-tu Blog

Copyright 2008, hau-tu.de. All Rights Reserved.