Hallo liebe VBler,
ich sitze schon seit Stunden an einen Code zur (verschlüsselten) Übertragung von Daten mittels TCP/IP.
So sieht der Code des Clients (prinzipiell) aus:
_NetStream as Io.Stream = new NetworkStream(Sock) 'Einfach nur ein
' NetworkStream-Exemplar erstellen, dass einen verbundenen Socket besitzt
if EncryptionNeeded then
_NetStream = new CryptoStream(_NetStream, AES.CreateEncryptor, _
CryptoStreamMode.Write) 'AES ist ein Rijndael- Exemplar
end if
'Senden von Daten
Dim W As New System.IO.BinaryWriter(_NetStream, System.Text.Encoding.Unicode)
W.Write(_Stream.Length) '_Stream ist ein Stream, der die zu sendenden Bytes
' enthält (Meistens ein MemoryStream
W.Flush()
'Alle Daten kopieren
Dim B(8191) As Byte
Do
Dim RB As Integer = _Stream.Read(B, 0, B.Length) '_Stream ist ein
' Stream, der die zu sendenden Bytes enthält (Meistens ein MemoryStream
If RB = 0 Then Exit Do
_NetStream.Write(B, 0, RB)
Loop So sieht der Code des Servers (prinzipiell) aus:
_NetStream as Io.Stream = new NetworkStream(Sock) 'Einfach nur ein
' NetworkStream-Exemplar erstellen, dass einen verbundenen Socket besitzt
if EncryptionNeeded then
_NetStream = new CryptoStream(_NetStream, AES.CreateDecryptor, _
CryptoStreamMode.Read) 'AES ist ein Rijndael- Exemplar
end if
'Empfangen von Daten
Dim R As New System.IO.BinaryReader(_NetStream, System.Text.Encoding.Unicode)
Dim DataLength As Long = R.ReadInt64
'Kopieren der Bytes aus dem NetStream, in den Stream (_Stream), der die zu
' empfangenen Bytes speichert z.B. MemoryStream oder FileStream
Dim B(8191) As Byte
Do
Dim RB As Integer = R.Read(B, 0, CInt(IIf(DataLength > B.Length, _
B.Length, DataLength)))
DataLength -= RB
_Stream.Write(B, 0, RB)
Loop Until DataLength = 0 Das Senden von unverschlüsselten Daten (EncryptionNeeded = False) funktioniert einwandfrei. Sobald ich aber die EncryptionNeeded - Variable auf True setzte funktioniert der Empfang nicht mehr. Die Länge der anzukommenden Daten (DataLength - Variable des Servers) wird richtig ausgelesen. Allerdings fehlen dem Stream, aus dem die Daten ausgelesen werden scheinbar ein paar Bytes (also DataLength > _NetStream.Length) und somit blockiert der Server beim Auslesen.
Da TCP garantiert, dass alle Daten ankommen (in der richtigen Reihenfolge) und der Client auf jeden Fall alle Daten in den "Sende" Stream schreibt, weiß ich einfach nicht mehr weiter.
Würde mich über JEDE Hilfe riesig freuen!
Vielen Dank schon alleine fürs Lesen.
Gruß,
Chris |