ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
852
852
EMPFEHLEN
-
hab ein kleines Problem mit meinen Chat-Programm.
Wenn ich einen längeren Text versende, dann scheint es so,
daß der Text nicht wieder aus dem cache geleert wird.
Zumindest scheint das so.....
Wenn ich kleinere Textteile versende, funtkioniert dies, aber
wenn größere Sätze versendet werden und im Anschluss
wieder ein Text dann wird der zuletzt gesendete Text an
den vorherigen Text irgendwie mit angefügt, oder der
erste Text überschrieben.
Kennt jemand so ein ähnliches Problem mit dem Socket?
Ich versuch mal ein bischen Code reinzustellen:
Also vom Client-Listener (läuft im Hintergrund)
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
Imports System.Security.Cryptography Imports System.IO Imports System.Net.Sockets Imports System.Text Public Class form1 Private SimpleServer As TcpListener Private Client As New TcpClient Public Stream As NetworkStream Public clientdata As String ' Öffentliche Variable deklarieren Dim bytes() As Byte Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Timer1.Start() ' Timer1 starten Timer1.Interval = (20) ' Timer1 Intervall = 0,02sec. NotifyIcon1.Visible = True ' NotifiIcon in der Systemanzeige sichtbar machen End Sub Private Sub OnConnect(ByVal ar As System.IAsyncResult) On Error GoTo fehler ' Bei Fehler gehe zu Sprungmarke fehler: Client = SimpleServer.EndAcceptTcpClient(ar) Stream = Client.GetStream ReDim bytes(Client.ReceiveBufferSize) Stream.BeginRead(bytes, 0, CInt(Client.ReceiveBufferSize), AddressOf onGetData, New Object) Exit Sub ' Prozedur verlassen fehler: ' Sprungmarke fehler End Sub Private Sub onGetData(ByVal ar As System.IAsyncResult) On Error GoTo fehler ' Bei Fehler gehe zu Sprungmarke fehler: clientdata = Encoding.ASCII.GetString(bytes) 'MsgBox((clientdata), , "Mitteilung von Chat-User") Stream.BeginRead(bytes, 0, CInt(Client.ReceiveBufferSize), AddressOf onGetData, New Object) System.Threading.Thread.Sleep(2500) Exit Sub ' Prozedur verlassen fehler: ' Sprungmarke fehler End Sub Private Sub ChatToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChatToolStripMenuItem.Click On Error GoTo fehler ' Bei Fehler gehe zu Sprungmarke fehler: Form2.ShowDialog() ' Form2 öffnen Exit Sub ' Prozedur verlassen fehler: ' Sprungmarke fehler End Sub Private Sub CahtToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CahtToolStripMenuItem.Click NotifyIcon1.Visible = False ' NotifyIcon1 sichtbar = nein Me.Close() ' Form schließen End Sub Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing If e.CloseReason = CloseReason.UserClosing Then 'wenn der User die Form schließt ... 'e.Cancel = True 'das Beenden wird unterbrochen NotifyIcon1.Visible = False 'auch das Icon wieder angezeigt End If End Sub Private Sub cbStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbStart.Click Dim leer As String = "" ' Variable deklarieren und instanzieren If txtPort.Text = leer Then ' Wenn Textbox "txtPort" gleich der Var. leer ist, dann: MsgBox("Bitte Port angeben", MsgBoxStyle.Information, "Hinweis") ' Meldungsbox ausgeben Exit Sub ' Prozedur verlassen Else ' ansonsten: If IsNumeric(txtPort.Text) = True Then ' Wenn der Inhalt der Textbox "txtPort" ein numerischer Wert ist, dann: Dim port As Integer = CInt(txtPort.Text) ' Variable deklarieren und instanzieren SimpleServer = New TcpListener(System.Net.IPAddress.Parse(CStr(0)), port) SimpleServer.Start() SimpleServer.BeginAcceptTcpClient(AddressOf OnConnect, New Object) Me.Hide() ' Form "verstecken" Form2.txtPort.Text = CStr(port) ' Der Form2 den Inhalt der Textbox "txtPort" übergeben Form2.ShowDialog() ' Form2 anzeigen Else ' ansonsten: MsgBox("Es können nur Zahlen angegeben werden (1 - 65535)", MsgBoxStyle.Critical, "ACHTUNG!") ' Meldungsbox ausgeben txtPort.Text = "" ' Textbox "txtPort" leeren Exit Sub ' Prozedur verlassen End If End If Exit Sub End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Form2.rtxtEmpf2.Text = clientdata ' Den Inhalt der öffentlichen Var. clientdata der Form2 übergeben End Sub End Class
und hier die Eingabeform
PHP-Code:Imports System.Net.Sockets
Imports System.Text
Imports System.Security.Cryptography
Imports System.IO
Public Class Form2
Private SimpleClient As New TcpClient
Private Stream As NetworkStream
Private con As String = "System.Net.Sockets.NetworkStream"
Sub entschluesseln() ' Prozedur entschluesseln
Dim rd As New RijndaelManaged
Dim rijndaelIvLength As Integer = 16
Dim md5 As New MD5CryptoServiceProvider
Dim key() As Byte = md5.ComputeHash(Encoding.ASCII.GetBytes(txtKey2.Text)) ' Passwort von Textbox "txtKey2" holen
md5.Clear()
Dim encdata() As Byte = Convert.FromBase64String(rtxtEmpf2.Text) ' Verschlüsselten Text aus RichTextBox "rtxtEmpf2" holen
Dim ms As New MemoryStream(encdata)
Dim iv(15) As Byte
ms.Read(iv, 0, rijndaelIvLength)
rd.IV = iv
rd.Key = key
Dim cs As New CryptoStream(ms, rd.CreateDecryptor, CryptoStreamMode.Read)
Dim data(CInt(ms.Length - rijndaelIvLength)) As Byte
Dim i As Integer = cs.Read(data, 0, data.Length)
rtxtEmpf.Text = System.Text.Encoding.ASCII.GetString(data, 0, i) ' Entschlüsselten Text in die RichTextBox "rtxtEmpf" schreiben
cs.Close()
rd.Clear()
End Sub
Sub verschluesseln() ' Prozedur verschluesseln
Dim rd As New RijndaelManaged
Dim md5 As New MD5CryptoServiceProvider
Dim key() As Byte = md5.ComputeHash(Encoding.ASCII.GetBytes(txtKey.Text)) ' Passwort von Textbox "txtKey" holen
md5.Clear()
rd.Key = key
rd.GenerateIV()
Dim iv() As Byte = rd.IV
Dim ms As New MemoryStream
ms.Write(iv, 0, iv.Length)
Dim cs As New CryptoStream(ms, rd.CreateEncryptor, CryptoStreamMode.Write)
Dim data() As Byte = System.Text.Encoding.ASCII.GetBytes(txtOrig.Text) ' Text zum Verschlüsseln aus TextBox "txtOrig" holen
cs.Write(data, 0, data.Length)
cs.FlushFinalBlock()
Dim encdata() As Byte = ms.ToArray()
txtSend.Text = Convert.ToBase64String(encdata) ' Verschlüsselten Text in Textbox "txtSend" schreiben
cs.Close()
rd.Clear()
End Sub
Private Sub cbSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbSend.Click
On Error GoTo fehler ' bei Fehler, gehe zu Sprungmarke fehler:
If txtOrig.Text = "" Or txtKey.Text = "" Then ' Wenn Textbox "txtOrig" oder Textbox "txtKey" leer sind, dann:
MsgBox("Bitte Text oder Passwort eingeben", MsgBoxStyle.Information, "Hinweis") ' Meldungsbox ausgeben
Else ' ansonsten:
verschluesseln() ' Prozedur verschluesseln aufrufen
Dim sendBytes As Byte() = _
System.Text.Encoding.ASCII.GetBytes(txtSend.Text)
Stream.Write(sendBytes, 0, sendBytes.Length)
Stream.Flush()
System.Threading.Thread.Sleep(1000) ' Systempause einleiten (1sec.)
txtOrig.Text = "" ' Textboxen leeren
txtSend.Text = ""
form1.clientdata = ""
rtxtEmpf.Text = "" ' RichTextBoxen leeren
rtxtEmpf2.Text = ""
End If
Exit Sub ' Prozedur verlassen
fehler: ' Sprungmarke fehler:
End Sub
Private Sub cbCon_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbCon.Click
On Error GoTo fehler ' bei Fehler, gehe zu Sprungmarke fehler:
If txtIP.Text = "" Then ' Wenn Textbox "txtIP" leer ist, dann:
MsgBox("IP-Adresse oder Domain angeben!", MsgBoxStyle.Information, "Hinweis") ' Meldungsbox ausgeben
Application.DoEvents() ' Systempause unterbrechen
lblOK.Visible = False ' Label "lblOK" sichtbar = nein
lblER.Visible = True ' Label "lblER" sichtbar = ja
txtCon.Text = "" ' Textbox "txtcon" leeren
Exit Sub ' Prozedur verlassen
Else ' ansonsten:
Dim ip As String = txtIP.Text ' Variable deklarieren und instanzieren
Dim port As Integer = CInt(txtPort.Text) ' Variable deklarieren und instanzieren
Me.Refresh() ' Form neu laden
SimpleClient.Connect(ip, port) ' Der Klasse Connect, IP und Port zuweisen
Stream = SimpleClient.GetStream
txtCon.Text = Stream.ToString
Dim outStream As Byte() = _
System.Text.Encoding.ASCII.GetBytes(txtSend.Text)
Stream.Write(outStream, 0, outStream.Length)
Stream.Flush()
If txtCon.Text = con Then ' Wenn Textbox "txtCon" den Text von Var. con enthält, dann:
lblER.Visible = False ' Label "lblER" sichtbar = nein
lblOK.Visible = True ' Label "lblOK" sichtbar = ja
Else ' ansonsten:
lblER.Visible = True ' Label "lblER" sichtbar = ja
Exit Sub ' Prozedur verlassen
End If
End If
Exit Sub
fehler: ' Sprungmarke fehler:
End Sub
Private Sub ChatBeendenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChatBeendenToolStripMenuItem.Click
Me.Close() ' Form schließen
End Sub
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Start() ' Timer1 starten
Timer1.Interval = (20) ' Timer1 Intervall = 0,02sec.
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
On Error GoTo fehler ' bei Fehler, gehe zu Sprungmarke fehler:
entschluesseln() ' Prozedur entschluesseln aufrufen
Exit Sub ' Prozedur verlassen
fehler: ' Sprungmarke fehler:
End Sub
End Class
-
hat keiner eine Idee?
Ähnliche Themen
-
Chat zum Chat Messenger umbauen
Von Pranox im Forum Coders TalkAntworten: 4Letzter Beitrag: 02.02.10, 12:23 -
Flash Media Server und Flash Video Chat (PPV Chat)
Von Doogie im Forum Flash PlattformAntworten: 0Letzter Beitrag: 19.05.09, 17:59 -
Suche Chat Skript, moderierter Chat
Von SpAder im Forum PHPAntworten: 7Letzter Beitrag: 17.10.05, 14:52 -
Chat oder keine Chat - Das ist heir die Frage *scherz*
Von lobby im Forum PHPAntworten: 3Letzter Beitrag: 10.09.05, 11:08 -
Chat
Von rauch_c im Forum .NET ArchivAntworten: 7Letzter Beitrag: 21.05.04, 10:07





Zitieren
Login





