Entwickler-Ecke
Internet / Netzwerk - Socket.SendText
Moritz M. - Mo 21.10.02 19:22
Titel: Socket.SendText
Hi
hab ein kleines Prob:
Wenn ich
Quelltext
1:
| Server.Socket.Connections[0].Sendtext('hallo'); |
und direkt dannach
Quelltext
1:
| Server.Socket.Connections[0].Sendtext('taschau'); |
ausführe, kommt beim client immer "hallotschau" an.
Wie kann ich dass ändern?
cu
Onz
Marduk - Di 22.10.02 08:34
Weiss auch nicht genau, aber könnte funktionieren indem du nach jedem string einen Zeilenumbruch schickst (glaube das ging mit #13#10)
So hast du die strings dann getrennt
Gruß Dennis
Moritz M. - Di 22.10.02 13:43
Hi
geht leider nur manchmal...
cu
Onz
Moritz M. - Di 22.10.02 13:46
Hi
Geht leider nur manchmal..trotzdem danke
cu
Onz
O'rallY - Di 22.10.02 14:05
Die Idee vom Marduk war gar nicht so schlecht, doch statt des Zeilenumbruchs würde ich #0 vorschlagen, da man dieses Zeichen nicht schreiben kann, nur im Code festlegen. Wenn du dann einen String empfängst prüfst du ihn einfach auf das vorkommen von #0 und kannst dann den String mit folgendem Algi zerlegen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function GetWordOfString(Text: string; WordPos: Word): string; var p : PChar; begin p := PChar(Text); repeat Dec(WordPos); while p^ <> #0 do begin if WordPos = 0 then Result := Result + p^; Inc(p); end; if WordPos = 0 then Exit; Inc(p); until p^ = #0; end; |
Anwendung dürfte klar sein:
Quelltext
1: 2: 3: 4: 5: 6:
| s1 := 'hallo' + #0 + 'welt'; s2 := GetWordOfString(s1, 1); {s2 = 'hallo'}
s2 := GetWordOfString(s1, 2); {s2 = 'welt'} |
Eine andere Methode fällt mir zu Zeit nicht ein, denke aber das dies ne gute Lösung ist.
TheLaw - Fr 25.10.02 20:29
Hallo,
Hier mal eine Procedure (ungetestet) die einen Doppelnullterminierten string in eine StringList schreibt
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| function StringToList(const AString: string; const AList: TStrings); var P: PChar; S: string; Len: Integer; begin Assert(Assigned(AList)); P := PChar(AString); while P^ <> #0 do begin Len := StrLen(P); if Len > 0 then begin SetLength(S, Len); StrLCopy(PChar(S), P, Len); AList.Add(S); end; Inc(P, Len+1); end; end; |
Beispiel für einen Aufruf:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var List: TStringList; S: string; I: Integer; begin S := '1. Eintrag' + #0 + '2.Eintrag' + #0#0; // Wichtig: 2 Nullen am Ende List := TStringList.Create; try StringToList(S, List); for I := 0 to List.Count - 1 do begin // Mach was mit List end; finally List.Free; end; end; |
mfg
Th3Law
Moritz M. - Sa 26.10.02 07:43
Hi
Das mit den Codes wären schöne Lösungen. Nurm leider wird jeder String einzeln geschickt, komplett unanhänging und undregelmäßig.
Hagbard Celine - Sa 26.10.02 11:35
Onz hat folgendes geschrieben: |
Hi
Das mit den Codes wären schöne Lösungen. Nurm leider wird jeder String einzeln geschickt, komplett unanhänging und undregelmäßig. |
Ich kann eurem Problem nicht ganz folgen!
Für jeden String wird doch ein Ereig. ausgelöst und Du kannst jeden gesendeten String einzeln verarbeiten, oder???
Also hängt es Doch an Dir was Du damit machst, wenn Du beide Strings als caption eines Labels hintereinander hängst ist klar das kein Zeilenumbruch kommt!
Wenn Du jeden receivedText mit add in ein Memo schreibst sollte dann jeder String in einer Zeile stehen! Oder hab ich da was falsch verstanden???
Moritz M. - Sa 26.10.02 11:37
Hi
Ja, Ich sende auch jeder String einzeln. Nur geht das irgendwie nicht. Manchmal bekomme Ich einfach den Text aus 2x Senden hintereinander ausgegeben.
Hagbard Celine - Sa 26.10.02 11:44
Onz hat folgendes geschrieben: |
Hi
Ja, Ich sende auch jeder String einzeln. Nur geht das irgendwie nicht. Manchmal bekomme Ich einfach den Text aus 2x Senden hintereinander ausgegeben. |
Poste mal deine Prozedur die im onRead des Clients steht!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!