Hey Leute,
Heute ist mir ein Seltsames Verhalten der Socket Klasse vorgekommen.
Beim versuch Daten per
FileLogger dient lediglich zum schreiben von Debug-Nachrichten in eine Datei.
Ich kam zu diesem doppelten Empfangen der Bytes, da, wie schon gesagt, eine zufällige Anzahl Bytes einfach fehlte. Selbst wenn ich die Überladung
Mehr noch ist es seltsam, dass während eines Debugging vorganges mit Breakpoints alles perfekt funktioniert, also wenn ich nach und nach durchschreite.
Wenn ich Lokal arbeite also nur auf meinem Rechner, dann funktioniert es ebenso tadellos, auch ohne Debugging.
Zwar habe ich das Problem umgangen, würde jedoch gerne Wissen, was dieses seltsame Verhalten hervorruft, ich hoffe jemand von euch kann mir helfen.
MfG Earan
Heute ist mir ein Seltsames Verhalten der Socket Klasse vorgekommen.
Beim versuch Daten per
Socket.Send()
und Socket.Receive()
durchs Internet zu schicken, gingen plötzlich Bytes verloren, z.B. von etwas über 21 Tausend Bytes ging eine komplett zufällige Anzahl verloren. Nachdem ich dann Wireshark aktiviert habe, sah ich, dass doch alle Daten angekommen waren. Nun habe ich folgendes Konstrukt:C#-Quellcode
- private int ReceiveData(out byte[] Message)
- {
- try
- {
- byte[] ReadBuffer = new byte[4] { 0xFF, 0xFF, 0xFF, 0xFF };
- ClientS.Receive(ReadBuffer, 4, SocketFlags.None);
- int size = BitConverter.ToInt32(ReadBuffer, 0);
- byte[] ExactText = new byte[size];
- int e = ClientS.Receive(ExactText,BitConverter.ToInt32(ReadBuffer, 0),SocketFlags.None);
- FileLogger.Log("first receive:" + e);
- byte[] t = null;
- if (e < size)
- {
- byte[] buffer2 = new byte[size];
- int ee = ClientS.Receive(buffer2);
- if (e + ee == size)
- {
- t = new byte[size];
- Buffer.BlockCopy(ExactText, 0, t, 0, e);
- Buffer.BlockCopy(buffer2, 0, t, e, ee);
- }
- FileLogger.Log("second receive:" + ee);
- FileLogger.Log("combined amount of Data:" + (e + ee));
- }
- else
- { t = ExactText; }
- Message = AESThenHMAC.SimpleDecryptWithPassword(t, AESPASS);
- return Message != null ? Message.Length : -1;
- }
- catch(Exception e)
- {
- Message = null;
- FileLogger.Log(e.Message);
- FileLogger.Log(e.StackTrace);
- return -1;
- }
- }
FileLogger dient lediglich zum schreiben von Debug-Nachrichten in eine Datei.
Ich kam zu diesem doppelten Empfangen der Bytes, da, wie schon gesagt, eine zufällige Anzahl Bytes einfach fehlte. Selbst wenn ich die Überladung
Sockets.Receive(byte[],int,SocketFlags)
benutze, werden nicht alle Bytes ausgelesen. Erst nach dem doppelten Empfangen, sind alle Bytes vorhanden.Mehr noch ist es seltsam, dass während eines Debugging vorganges mit Breakpoints alles perfekt funktioniert, also wenn ich nach und nach durchschreite.
Wenn ich Lokal arbeite also nur auf meinem Rechner, dann funktioniert es ebenso tadellos, auch ohne Debugging.
Zwar habe ich das Problem umgangen, würde jedoch gerne Wissen, was dieses seltsame Verhalten hervorruft, ich hoffe jemand von euch kann mir helfen.
MfG Earan