Autor |
Beitrag |
Ja-Pa
![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. half ontopic star](./graphics/ranks/star_onofftopic.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. offtopic star](./graphics/ranks/star_offtopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. offtopic star](./graphics/ranks/star_offtopic_full.png)
Beiträge: 458
Win XP, Suse 9.3
D1, D3, D5 Std, D7 Pro, D2005 Pers, Kylix 3
|
Verfasst: So 23.10.05 16:42
Hallo,
ich möchte einen Record vom ClientSocket zum ServerSocket übertragen. Dazu verwende ich Socket.ReceiveBuf(Recordvariable, Socket.ReceiveLength);, da mir die Größe des Records nicht bekannt ist.
Wenn ich nun aber auf ein Element des empfangenen Records zugreifen möchte, bekomme ich eine Zugriffsverletzung. Woran liegt das? Kann ich ReceiveLength hier nicht verwenden?
Vielen Dank,
Ja-Pa
_________________ Der Autor dieses Textes haftet nicht für Schäden an Soft- oder Hardware
oder Vermögensschäden, die durch das Benutzen des Textes entstehen.
|
|
Muetze1
![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 346
|
Verfasst: So 23.10.05 17:36
1. ReceiveLength() gibt die aktuell empfangenen Bytes an - das kann mehr oder auch weniger als der Record sein
2. Es ist nirgendwo gewährleistet, das der Record als Ganzes sofort übertragen wird. Es ist gut möglich, das du 2 oder mehr OnClientRead Aufruf bekommst, bevor der Record als ganzes bei dir angekommen ist.
3. Bei deinem ReceiveBuffer() gibst du doch eine Variable vom Typ des Records an - also wieso solltest du dann die Grösse des selbigen nicht kennen? Delphi-Quelltext 1: 2:
| If Socket.ReceiveLength >= SizeOf(MeinRecord) Then socket.receivebuf(MeinRecord, SizeOf(MeinRecord)); |
_________________ 49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
|
|
Ja-Pa ![Threadstarter Threadstarter](./graphics/viewtopic/threadstarter.png)
![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. half ontopic star](./graphics/ranks/star_onofftopic.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. offtopic star](./graphics/ranks/star_offtopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. offtopic star](./graphics/ranks/star_offtopic_full.png)
Beiträge: 458
Win XP, Suse 9.3
D1, D3, D5 Std, D7 Pro, D2005 Pers, Kylix 3
|
Verfasst: So 23.10.05 19:30
Funktioniert das auch, wenn ich Variants im Record benutze? Denn je nach dem, welchen Varaiablentyp die Variants erhalten, sind die doch unterschriedlich groß, oder?
_________________ Der Autor dieses Textes haftet nicht für Schäden an Soft- oder Hardware
oder Vermögensschäden, die durch das Benutzen des Textes entstehen.
|
|
Ja-Pa ![Threadstarter Threadstarter](./graphics/viewtopic/threadstarter.png)
![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. half ontopic star](./graphics/ranks/star_onofftopic.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. offtopic star](./graphics/ranks/star_offtopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. offtopic star](./graphics/ranks/star_offtopic_full.png)
Beiträge: 458
Win XP, Suse 9.3
D1, D3, D5 Std, D7 Pro, D2005 Pers, Kylix 3
|
Verfasst: So 23.10.05 20:14
Dein Code führt leider weiterhin zu einem Zugriffsfehler - und das sogar, wenn der Record nur einen einzigen String und keine Variants enthält... aber Strings sind doch auch immer unterschiedlich groß? Ich kann doch gar nicht wissen, wie groß der Record ist, bevor ich ihn nicht empfangen habe?
_________________ Der Autor dieses Textes haftet nicht für Schäden an Soft- oder Hardware
oder Vermögensschäden, die durch das Benutzen des Textes entstehen.
|
|
Muetze1
![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 346
|
Verfasst: So 23.10.05 21:43
Oha, da tun sich ja Abgründe auf...
1. Ein Record ist immer bekannt von der Grösse. Der Compiler nutzt das als "Maske" für die Strukturierung von Speicher. Dieser Record hat eine feste Grösse, die zur Compilierung feststeht.
2. Ein String ohne Längenangabe ([20]) und nicht vom Typ ShortString, ist ein AnsiString. Ein AnsiString ist ein Zeiger und somit 4 Bytes gross. Wenn du also einen Record hast wo ein Typ String drinne ist, dann ist der 4 Bytes gross und enthält nur die Adresse im Speicher wo der String steht - und die Adresse ist bei deinem empfangenden Programm bestimmt nicht die gleiche - ganz davon zu schweigen, das der Inhalt fehlt.
3. Bei einem Variant ist es ganz ähnlich: Du hast den Typ vorne stehen im Speicher und danach bei den meisten Typen eine Adresse wo die Daten stehen.
_________________ 49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
|
|
Ja-Pa ![Threadstarter Threadstarter](./graphics/viewtopic/threadstarter.png)
![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. half ontopic star](./graphics/ranks/star_onofftopic.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. offtopic star](./graphics/ranks/star_offtopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. offtopic star](./graphics/ranks/star_offtopic_full.png)
Beiträge: 458
Win XP, Suse 9.3
D1, D3, D5 Std, D7 Pro, D2005 Pers, Kylix 3
|
Verfasst: So 23.10.05 22:54
Oh danke
Wie übertrage ich denn dann einen String? ShortStrings sind leider zu kurz.
Einen einzelnen String könnte man in einem Stream speichern und den Stream verschicken. Aber funktioniert das auch mit einem Record?
_________________ Der Autor dieses Textes haftet nicht für Schäden an Soft- oder Hardware
oder Vermögensschäden, die durch das Benutzen des Textes entstehen.
|
|
Narses
![Narses hat insgesamt 94.4% On-Topic und 5.6% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Narses hat insgesamt 94.4% On-Topic und 5.6% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Narses hat insgesamt 94.4% On-Topic und 5.6% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Narses hat insgesamt 94.4% On-Topic und 5.6% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Narses hat insgesamt 94.4% On-Topic und 5.6% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Narses hat insgesamt 94.4% On-Topic und 5.6% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Narses hat insgesamt 94.4% On-Topic und 5.6% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
![Administrator Administrator](graphics/ranks/admin.png)
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 23.10.05 23:26
Moin!
Hast du schon mal die Forums-Suche benutzt? Solltest du...
Ich rate wie immer in diesem Fall zu einem Protokoll, einfach mal hier nach diesem Wort suchen.
Und um die Frage zu beantworten:
Delphi-Quelltext
cu
Narses
|
|
Muetze1
![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Muetze1 hat insgesamt 92.2% On-Topic und 7.8% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 346
|
Verfasst: Mo 24.10.05 12:10
Oder einfach vorher die Länge des Strings senden - z.B. in Form eines Integer der dann einfach jedem String als Präfix vorausgeht und danach dann in der angegebenen Länge der String.
Als Beispiel kannst du dir ja mal den Chat auf meiner HP anschauen - dort wird gleiches gemacht... (und er nutzt ein Protokoll, ist unumgänglich)
_________________ 49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
|
|
Ja-Pa ![Threadstarter Threadstarter](./graphics/viewtopic/threadstarter.png)
![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. half ontopic star](./graphics/ranks/star_onofftopic.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. offtopic star](./graphics/ranks/star_offtopic_full.png) ![Ja-Pa hat insgesamt 57.0% On-Topic und 43.0% Off-Topic Beiträge geschrieben. offtopic star](./graphics/ranks/star_offtopic_full.png)
Beiträge: 458
Win XP, Suse 9.3
D1, D3, D5 Std, D7 Pro, D2005 Pers, Kylix 3
|
Verfasst: Mo 24.10.05 15:39
Danke für die Antworten. Die Suche nach "Protokoll" hat mich dann weitergebracht.
Ich werde jetzt keinen Record verschicken, sondern Befehl und Parameter in einem String mit Trennzeichen getrennt, wie in diesem Thread beschrieben.
_________________ Der Autor dieses Textes haftet nicht für Schäden an Soft- oder Hardware
oder Vermögensschäden, die durch das Benutzen des Textes entstehen.
|
|
|