Entwickler-Ecke
Internet / Netzwerk - Problem mit UDP
hui1991 - Mi 10.05.06 06:57
Titel: Problem mit UDP
Also ich mache ein Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer; FromIP: String; Port: Integer); var MyStream2: TMemoryStream; wert: String; endwert: Integer; begin MyStream2 := TMemoryStream.Create; try NMUDP1.ReadStream(MyStream2); SetLength(wert, NumberBytes); MyStream2.Read(wert, NumberBytes); endwert:=StrToInt(wert[1]); Label15.Caption:=IntToStr(endwert); finally MyStream2.Free; end; end; |
Dabei kommt das hier noch:
Quelltext
1: 2:
| Exception EAccessViolation in Modul ABC.exe bei 00002C9C. Zugriffsverletzung bei Adresse 00402C9C in Modul 'ABC.exe'. Lesen von Adresse FFFFFFFF. |
Wenn es ausgeführt wird, wird entweder MyStream2.Free zwei mal ausgeführt oder es kommt eine Access Violation. Ich weis leider nicht warum :(
MfG
hui1991
Stefan.Buchholtz - Mi 10.05.06 10:11
Der Fehler liegt beim Lesen aus dem Stream in den String - TStream.Read schreibt die gelesenen Daten direkt in die übergebene Variable.
String ist aber intern ein Zeiger auf den String. Mit Read wird also der Zeiger und (wenn mehr als 4 Bytes gelesen werden) andere lokale Variablen und sonstige Daten auf dem Stack überschrieben.
So ist es richtig;
Delphi-Quelltext
1:
| MyStream2.Read(PChar(wert)^, NumberBytes); |
Stefan
hui1991 - Mi 10.05.06 16:19
Ich kenne dieses Problem nicht:
Quelltext
1:
| Im Projekt ABC.exe ist eine Exception der Klasse EConvertError aufgetreten. Meldung: '' |
Hab den code so angepast wie es sein sollte.
Weis nicht woran das liegt.
Stefan.Buchholtz - Mi 10.05.06 16:32
Das sieht so als ob StrToInt fehlschlägt. Hast du mal überprüft, ob du überhaupt Daten bekommst und wie die aussehen?
Stefan
BenBE - Mi 10.05.06 16:39
Der Fehler liegt in Zeile 12. Dort muss es heißen MyStream.ReadBuffer(wert[1], NumberOfBytes);
Die zweite Änderung bzgl. Read und ReadBuffer betrifft einzig und allein die Fehlerkorrektur: ReadBuffer löst eine Exception aus, wenn die angeforderte Datenmenge nicht gelesen werden konnte.
hui1991 - Mi 10.05.06 17:00
Genau das ist das Problem.
War ein wenig zu lahm das noch hin zuschreiben.
Dummer weise kommt nur das hier raus:
wert: #0'ÜE'#0' J'
Ich weis nicht warum
Ich habe eigentlich 1Hallo geschrieben.
Keine Ahnung warum das falsch angezeigt wird.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!