Hey,
ich habe nebenbei auf der Arbeit einen kleinen Chat geschrieben, um untereinander mit den Kollegen kommunizieren zu können.
Es war eher ein Spaß-Projekt, aber vielleicht kann es jemand gebrauchen, auch wenn mein Codestil echt grottig ist.
Es basiert ursprünglich alles auf diesem Tutorial.
Features |
Wer tippt gerade ✓ |
Flüstern ✓ |
Profilbilder ✓ |
Registrieren/Login ✓ |
Offline-Chat ✓ |
Öffentlicher Chat ✓ |
SQLite als Datenbank ✓ |
Online-Liste ✓ |
Rijndael-Verschlüsselung ✓ |
Onlineuser in Zahlen ✓ |
Chaträume (Entfernt) ✗ |
Datei Upload & Download ✓ |
Freunde-System ✓ |
IP Blocklist ✓ |
Private und öffentliche Pakete ✓ |
Server antispam via IP-Timeout ✓ |
Befehlauthentifizierung via Nutzername & Passwort ✓ |
Bot (Bisher nur online - Ohne Funktion) ✓ |
Chat wird in Dateien aufgeteilt (So kann eine Datei nicht voll-laufen) ✓ |
Client:
Datenbank-Aufbau:
Server:
Geplante Features:
Features |
User-Begrenzung |
Admin-Only |
Usergruppen und Permissions |
Watch together (YouTube) |
Wenn ihr das Lib-Projekt herunterladet, könnt ihr auch ganz einfach mit Befehlen und wenig Code arbeiten!
So kann der Server gestartet werden:
VB.NET-Quellcode
- Module Server
- Sub Main()
- Dim xoredTCP As New xoredServer
- xoredTCP.EnableBot = True 'True = Ein Bot ist immer online, False = Kein Bot ist online
- xoredTCP.StoreOfflineChat = True 'True = Chat wird im Room-Ordner abgespeichert
- xoredTCP.SendOfflineChatOnJoin = True 'True = Der Offline-Chat wird beim Joinen an den Client gesendet
- xoredTCP.BotName = "[Bot]xored" 'Falls ein Bot online sein soll, kann man hier den Namen ändern
- xoredTCP.DataBaseFileName = "Accounts.sqlite"
- xoredTCP.Port = 8000
- xoredTCP.StartServer()
- End Sub
- End Module
Die Calls im Client:
VB.NET-Quellcode
- Public Function ConnectToServer()
- Public Function DisconnectFromServer()
- Public Function SendHeartBeat(ByVal Username As String, ByVal Password As String)
- Public Function DownloadFile(ByVal Filename As String, ByVal Username As String)
- Public Function SendFile(ByVal Username As String, ByVal Basefile As String, ByVal Filename As String, ByVal UsernameAgain As String, ByVal Password As String)
- Public Function RequestFileList(ByVal Username As String)
- Public Function RequestFriendList(ByVal Target As String, ByVal TargetUsername As String, ByVal TargetPassword As String)
- Public Function DeleteFriend(ByVal TargetUsername As String, ByVal SenderUsername As String, ByVal SenderPassword As String)
- Public Function InviteFriend(ByVal TargetUsername As String, ByVal SenderUsername As String, ByVal SenderPassword As String)
- Public Function RequestChat(ByVal Room As String)
- Public Function StartTyping(ByVal SenderUsername As String, ByVal SenderPassword As String)
- Public Function SendChat(ByVal SenderUsername As String, ByVal Message As String, ByVal DestRoom As String, ByVal SenderPassword As String)
- Public Function SendPrivateChat(ByVal TargetUsername As String, ByVal SenderUsername As String, ByVal Message As String, ByVal SenderPassword As String)
- Public Function Login(ByVal SenderUsername As String, ByVal SenderPassword As String)
- Public Function Register(ByVal SenderUsername As String, ByVal SenderPassword As String)
- Public Function DeleteNicknameFromServer(ByVal SenderUsername As String)
- Public Function RequestImageFromUser(ByVal TargetUsername As String)
- Public Function SendStopTyping(ByVal SenderUsername As String, ByVal SenderPassword As String)
- Public Function UploadProfileImage(ByVal SenderUsername As String, ByVal Basefile As String)
So wird der Client initialisiert:
VB.NET-Quellcode
- Dim xoredClient As xoredClient = New xoredClient()
- Public ListenThread As New Threading.Thread(AddressOf Listen)
- Public Sub Listen()
- While xoredClient.client.Connected
- Me.Invoke(New xoredClient.DAddItem(AddressOf xoredClient.AddItem), Decrypt(xoredClient.streamr.ReadLine, xoredClient.CryptKey))
- End While
- End Sub
- Private Sub frmClient_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
- xoredClient.ConnectToServer()
- End Sub
- Private Sub frmClient_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
- Try
- xoredClient.DeleteNicknameFromServer(tbLoginUser.Text)
- xoredClient.DisconnectFromServer()
- Catch
- Application.Exit()
- End Try
- End Sub
So kann man sich z.B. einloggen:
Oder registrieren:
Danke an @SpaceyX für die Idee mit der Verschlüsselung. Der Server sendet dem Client beim Connecten einen Random Key.
Dieser wird zum Ver- und Entschlüsseln des Streams benutzt. Jede Connection bekommt ihren eigenen privaten Key, somit sollte ein
Auslesen Dritter nicht möglich sein. 100% sicher ist man allerdings nie, z.B. bei einem Trojaner.
Verweise auf die Icon-Ersteller:
flaticon.com/authors/smashicons
freepik.com
flaticon.com/authors/dimitry-miroliubov
Verweise auf verwendete Libs:
github.com/PavelTorgashov/FastColoredTextBox
docs.microsoft.com/de-de/dotne…/sqlite/?tabs=netcore-cli
Um das Projekt lauffähig zu bekommen müsst ihr folgende NuGet-Pakete im Server-Projekt installieren:
- Microsoft.Data.Sqlite
Im Anhang findet ihr die beiden Projekte.
Liebe Grüße,
xored
Dieser Beitrag wurde bereits 32 mal editiert, zuletzt von „xored“ ()