Hi erstmal.
Ich will zur Zeit meinen Chat in WPF verwirklichen. Für den Datenverkehr zwischen Server und Client habe ich bisher folgende Klasse erstellt:
Spoiler anzeigen
Der Client selbst hat dann diesen Code:
Spoiler anzeigen
Es scheint nun als würde sich der Client verbinden, allerdings meldet der Server nicht, dass der Client sich verbunden hat (Der Server funktioniert aber 100%-ig richtig) und der Client ändert die Variable
Ich vermute dass es irgendwo bei der Kommunikation zwischen der Klasse und dem Client einen Fehler gibt, allerdings ist habe ich es vorher ohne extra Klasse gemacht, sodass ich mir da nicht sicher bin.
Wenn jemand den Fehler sieht und mir helfen kann würde mich das sehr freuen
~Grüße Väinämö
Ich will zur Zeit meinen Chat in WPF verwirklichen. Für den Datenverkehr zwischen Server und Client habe ich bisher folgende Klasse erstellt:
VB.NET-Quellcode
- Imports System.Net.Sockets
- Imports System.IO
- Imports System.Security.Cryptography
- Public Class Prismaes
- Dim Client As New TcpClient
- Dim Stream As NetworkStream
- Dim StreamW As StreamWriter
- Dim StreamR As StreamReader
- Dim SHA1 As New SHA1CryptoServiceProvider
- Public Event ConnectionFailed(ByVal e As ConnectionFailedEventArgs)
- Public Event IncomingMessage(ByVal e As NewMessageEventArgs)
- Public Event Connected()
- Public ThrdConnection As New System.Threading.Thread(AddressOf ListenToStream)
- Sub New()
- End Sub
- Sub Connect(ByVal ServerAddress As String, ByVal ServerPort As Integer, ByVal SPId As String, ByVal Password As String)
- Try
- Client.Connect(ServerAddress, ServerPort)
- Stream = Client.GetStream
- StreamW = New StreamWriter(Stream)
- StreamR = New StreamReader(Stream)
- ThrdConnection.Start()
- Dim CryptPassword As String = BitConverter.ToString(SHA1.ComputeHash(System.Text.Encoding.Default.GetBytes(Password)))
- Send(SPId & ":" & CryptPassword & ":8.1") '& Version
- RaiseEvent Connected()
- Catch ex As Exception
- RaiseEvent ConnectionFailed(New ConnectionFailedEventArgs With {.FailureReason = ConnectionFailedEventArgs.FailureReasons.ServerNotReachable})
- End Try
- End Sub
- Sub Send(ByVal ToSend As String)
- StreamW.Write(ToSend)
- StreamW.Flush()
- End Sub
- Sub ListenToStream()
- While Client.Connected
- RaiseEvent IncomingMessage(New NewMessageEventArgs With {.Message = StreamR.ReadLine})
- End While
- End Sub
- End Class
- Public Class ConnectionFailedEventArgs
- Enum FailureReasons
- ServerNotReachable = 0
- DataIncorrect = 1
- End Enum
- Public Property FailureReason As FailureReasons
- End Class
- Public Class NewMessageEventArgs
- Public Property Message As String
- End Class
Der Client selbst hat dann diesen Code:
VB.NET-Quellcode
- Public WithEvents Prismae As New Prismaes
- Public Delegate Sub DSHandleMessage(ByVal MessageToHandle As String)
- Sub Connected() Handles Prismae.Connected
- fyoLogon.IsOpen = False
- End Sub
- Sub ConnectionFailed(ByVal e As ConnectionFailedEventArgs) Handles Prismae.ConnectionFailed
- Select Case e.FailureReason
- Case ConnectionFailedEventArgs.FailureReasons.ServerNotReachable
- Me.ShowMessageAsync("Verbindung fehlgeschlagen", "Es konnte keine Verbindung mit dem angegebenen Server hergestellt werden. Überprüfen sie die IP-Adresse und stellen sie sicher, dass der Server erreichbar ist.", MessageDialogStyle.Affirmative)
- End Select
- End Sub
- Sub NewMessageIncoming(ByVal e As NewMessageEventArgs) Handles Prismae.IncomingMessage
- Dispatcher.Invoke(New DSHandleMessage(AddressOf HandleMessages), e.Message)
- End Sub
- Sub HandleMessages(ByVal Message As String)
- If Message = "/v/success" Then
- isLoggedIn = True
- ElseIf Message.StartsWith("/w") Then
- dtaUsername = Message.Remove(0, 3).Split(" "c)(3)
- btnLogon.Content = "Hallo " & dtaUsername
- End If
- End Sub
Es scheint nun als würde sich der Client verbinden, allerdings meldet der Server nicht, dass der Client sich verbunden hat (Der Server funktioniert aber 100%-ig richtig) und der Client ändert die Variable
dtaUsername
nicht.Ich vermute dass es irgendwo bei der Kommunikation zwischen der Klasse und dem Client einen Fehler gibt, allerdings ist habe ich es vorher ohne extra Klasse gemacht, sodass ich mir da nicht sicher bin.
Wenn jemand den Fehler sieht und mir helfen kann würde mich das sehr freuen
~Grüße Väinämö